package com.yihaomen.mybatis.inter; import java.io.IOException; public class TestThread { public static void main(String[] args) throws IOException { final Test obj = new Test(); new Thread() { public void run() { obj.m1(); } }.start(); new Thread() { public void run() { obj.m2(); } }.start(); new Thread() { public void run() { obj.m3(); } }.start(); } } class Test { static int count; volatile int target = 1; synchronized void m1() { for (int i = 0; i < 10; i++) { while (target == 2 || target == 3) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("m1() =" + i); target = 2; notifyAll(); } } synchronized void m2() { for (int i = 0; i < 10; i++) { while (target == 1 || target == 3) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("m2() =" + i); target = 3; notifyAll(); } } synchronized void m3() { for (int i = 0; i < 10; i++) { while (target == 1 || target == 2) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("m3() =" + i); target = 1; notifyAll(); } } }
Output result:
m1() =0 m2() =0 m3() =0 m1() =1 m2() =1 m3() =1 m1() =2 m2() =2 m3() =2 m1() =3 m2() =3 m3() =3 m1() =4 m2() =4 m3() =4 m1() =5 m2() =5 m3() =5 m1() =6 m2() =6 m3() =6 m1() =7 m2() =7 m3() =7 m1() =8 m2() =8 m3() =8 m1() =9 m2() =9 m3() =9