View Javadoc
1   package org.woehlke.computer.kurzweil.tabs.randomwalk.control;
2   
3   import lombok.Getter;
4   import lombok.extern.java.Log;
5   import org.woehlke.computer.kurzweil.commons.tabs.TabController;
6   import org.woehlke.computer.kurzweil.tabs.randomwalk.config.RandomWalk;
7   import org.woehlke.computer.kurzweil.tabs.randomwalk.config.RandomWalkContext;
8   
9   /**
10   * Cyclic Cellular Automaton.
11   * <p>
12   * (C) 2006 - 2013 Thomas Woehlke.
13   * http://thomas-woehlke.de/p/cyclic-cellular-automaton/
14   *
15   * @author Thomas Woehlke
16   * <p>
17   * Date: 05.02.2006
18   * Time: 00:36:20
19   */
20  @Log
21  @Getter
22  /**
23   * https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/util/concurrent/ThreadPoolExecutor.html
24   * https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/util/concurrent/Executor.html
25   * TODO: https://github.com/Computer-Kurzweil/computer_kurzweil/issues/18
26   * TODO: https://github.com/Computer-Kurzweil/computer_kurzweil/issues/19
27   * http://openbook.rheinwerk-verlag.de/javainsel9/javainsel_14_004.htm
28   */
29  public class RandomWalkController extends Thread implements TabController, RandomWalk {
30  
31      private static final long serialVersionUID = 7526471155622776147L;
32  
33      private final RandomWalkContext tabCtx;
34      private final int threadSleepTime;
35  
36      private Boolean goOn;
37  
38      public RandomWalkController(
39          RandomWalkContext tabCtx
40      ) {
41          super("Random Walk-Controller");
42          this.tabCtx = tabCtx;
43          this.goOn = Boolean.TRUE;
44          this.threadSleepTime = tabCtx.getCtx().getProperties().getRandomwalk().getControl().getThreadSleepTime();
45          ;
46      }
47  
48      public void run() {
49          //log.info("run() - begin");
50          boolean doIt;
51          do {
52              synchronized (this.goOn) {
53                  doIt = goOn.booleanValue();
54              }
55              synchronized (this.tabCtx) {
56                  //log.info("running");
57                  this.tabCtx.getTabModel().exec();
58                  this.tabCtx.exec();
59              }
60              try {
61                  super.sleep(this.threadSleepTime);
62              } catch (InterruptedException e) {
63                  log.info(e.getMessage());
64              }
65          }
66          while (doIt);
67          //log.info("run() - finished");
68      }
69  
70      public void exit() {
71          //log.info("exit");
72          try {
73              synchronized (goOn) {
74                  goOn = Boolean.FALSE;
75              }
76              //log.info("join");
77              join();
78              //log.info("joined");
79          } catch (InterruptedException e) {
80              log.info(e.getMessage());
81          }
82          //log.info("exited");
83      }
84  
85  }