DecThread类,对sample的i进行减1的线程:
public class DecThread extends Thread{ private Sample sample; public DecThread(Sample sample, String name){ super(name); this.sample = sample; } @Override public void run() { for(int i=0; i<20; i++){ sample.dec(); } } }
IncThread 类,对sample的i进行加1的线程:
public class IncThread extends Thread{ private Sample sample; public IncThread(Sample sample, String name){ super(name); this.sample = sample; } @Override public void run() { for(int i=0; i<20; i++){ sample.inc(); } } }
Sample类:
public class Sample { int i = 0; public synchronized void inc() { try { while (i == 1) { wait(); } i++; System.out.println(Thread.currentThread().getName() + "-" + i); notify(); } catch (InterruptedException e) { e.printStackTrace(); } } public synchronized void dec() { try { while (i == 0) { wait(); } i--; System.out.println(Thread.currentThread().getName() + "-" + i); notify(); } catch (InterruptedException e) { e.printStackTrace(); } } }
测试类TestIncDec :
public class TestIncDec { public static void main(String[] args) { Sample sample = new Sample(); IncThread inc1 = new IncThread(sample,"inc1"); IncThread inc2 = new IncThread(sample,"inc2"); DecThread dec1 = new DecThread(sample,"dec1"); DecThread dec2 = new DecThread(sample,"dec2"); inc1.start(); inc2.start(); dec1.start(); dec2.start(); } }