1.1.1.12. fejezet, Szálkezelés és időzítés

Szál létrehozásához implementálni kell a public class Runnable interfészt az osztálynak, amelyiket futtatni szeretnénk ilyen módon. Ez együtt jár az osztály run metódusának felülírásával. Az indításhoz pedig szükségünk van egy Thread osztályból képzett objektumra, aminek a konstruktorába adjuk át a szálat. Lássuk hogyan:

public class CommandThread implements Runnable {
 
  protected String[] cmd;
  protected String homeDir;
 
  public CommandThread(String[] command, String homeDir) {
    this.homeDir = homeDir;
    this.cmd = command;
  }
 
  public void run() {
    try {
      procBuilder = new ProcessBuilder(cmd);
      Map<String, String> env = procBuilder.environment();
      env.put("CHARSET", "UTF-8");
      File file = new File(homeDir);
      procBuilder.directory(file);
      Process proc = procBuilder.start();
    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }  
}
 
public class Command {
 
  protected CommandThread shellThread;
  protected Thread ownThread;
  protected Timer timer;
 
  public void start() {
    shellThread = new CommandThread();
    ownThread = new Thread(shellThread, "shellThread");
    ownThread.start();
  }
 
  public void schedule(int msec) {
    timer = new Timer();
    if (!ownThread.alive()) {
      timer.schedule(new TimerTask() {
        public void run() {
          start();
        }
      }, msec);
    }
  }
}

Az időzítéshez szükségünk lesz egy Timer osztályból képzett objektumra, és annak a schedule metódusára, valamint egy TimerTask osztályból képzett objektumra. A schedule többféle paraméterrel hívható, így akár az állandó újraidőzítés is megoldható vele.

Lásd még: Java 8 concurrency tutorial