使用了synchronize关键字和volatile,共享变量i;但是该方法不能用到三个线程的。
public class SynchronizeStudy implements Runnable{ volatile static int i = 0; public synchronized void increase() { notifyAll(); i++; System.out.println(Thread.currentThread().getName()+this.i); try { if(i == 100) { notifyAll(); } else { wait(); } } catch (InterruptedException e) { e.printStackTrace(); } } @Override public void run() { while(i < 100) { increase(); } } public static void main(String[] args) throws InterruptedException{ SynchronizeStudy synchronizeStudy = new SynchronizeStudy(); Thread t1 = new Thread(synchronizeStudy,"A"); Thread t2 = new Thread(synchronizeStudy,"B"); t1.start(); t2.start(); t1.join(); t2.join(); // C c = synchronizeStudy.new C(); } }
一部分打印结果如下:
A1
B2
A3
B4
A5
B6
A7
B8
A9
B10
A11
B12
A13
B14
A15
B16
A17
B18
A19
B20
A21
B22