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