2つのスレッドで処理を順番に実行する。

マルチスレッドは難しいなぁ〜。
昨日考えたときにはできなかった。今日になってやっとできた。トホホ。

public class HeavyThreadTest {
    ThreadA threadA;
    ThreadB threadB;
    Object lock = new Object();
    class ThreadA extends Thread {
        public void run() {
            try {
                synchronized(lock) {
                    lock.wait(1000L);   // threadBがwait()になるまで待つ。
                    System.out.println("A1");
                    lock.notify();
                    lock.wait();
                    System.out.println("A2");
                    lock.notify();
                    lock.wait();
                    System.out.println("A3");
                    lock.notify();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    class ThreadB extends Thread {
        public void run() {
            try {
                synchronized(lock) {
                    lock.wait();
                    System.out.println("B1");
                    lock.notify();
                    lock.wait();
                    System.out.println("B2");
                    lock.notify();
                    lock.wait();
                    System.out.println("B3");
                    lock.notify();
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    void test() {
        threadA = new ThreadA();
        threadB = new ThreadB();
        threadA.start();
        threadB.start();
    }
    public static void main(String[] args) {
        new HeavyThreadTest().test();
    }
}

実行結果

A1
B1
A2
B2
A3
B3