2012年9月5日水曜日

Threadの呼ぶ順番を制御してみる

Threadの呼ぶ順番を制御するには単純にrunメソッドの最後に呼びたいスレッドを呼び出せばよいだけであった。複数のスレッドの終了を前提として起動する場合は前提となるスレッドの終了時にカウントして待ち合わせを行うスレッドの数に達したら起動すればよい。notifyメソッドは起こしたいスレッドを指定できないのでスレッド関係の処理は順序の制御が難しそうだと思われがちだが結構単純にできた。
public class ThreadTest {

 static Thread1 t1 = new Thread1();
 static Thread2 t2 = new Thread2();
 static Thread3 t3 = new Thread3();
 static Thread4 t4 = new Thread4();

 public static void main(String[] args) {

  t1.start();
  t2.start();
 }

 static class Thread1 extends Thread {

  public void run() {
   System.out.println("t1");
   t3.fire();
   t4.fire();
  }
 }

 static class Thread2 extends Thread {

  public void run() {
   System.out.println("t2");
   t3.fire();
   t4.fire();
  }
 }

 static class Thread3 extends Thread {
  int i = 0;

  public void fire() {
   if (++i >= 2) {
    start();
   }
  }

  public void run() {
   System.out.println("t3");
  }

 }

 static class Thread4 extends Thread {
  int i = 0;

  public void fire() {
   if (++i >= 2) {
    start();
   }
  }

  public void run() {
   System.out.println("t4");
  }

 }

}

0 件のコメント: