class Resource{ private int num = 0; private boolean flag = true; public synchronized void add() { while(this.flag == false) { try { super.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } this.num++; System.out.println("加法操作-" + Thread.currentThread().getName() + this.num); this.flag = false; super.notifyAll(); } public synchronized void sub() { while(this.flag == true) { try { super.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } try { Thread.sleep(80); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } this.num--; System.out.println("减法操作-" + Thread.currentThread().getName() + this.num); this.flag = true; super.notifyAll(); } } class Jia implements Runnable{ private Resource resource; public Jia(Resource resource) { this.resource = resource; } @Override public void run() { for (int i = 0; i < 50; i++) { resource.add(); } } } class Jian implements Runnable{ private Resource resource; public Jian(Resource resource) { this.resource = resource; } @Override public void run() { for (int i = 0; i < 50; i++) { resource.sub();; } } } public class ThreadJiaJian { public static void main(String[] args) { Resource resource = new Resource(); Jian jian = new Jian(resource); Jia jia = new Jia(resource); new Thread(jian,"减法线程A").start(); new Thread(jian,"减法线程B").start(); new Thread(jia,"加法线程X").start(); new Thread(jia,"加法线程Y").start(); }
}
使用synchronized wait() notifyall() 实现简单的加减法同步
猜你喜欢
转载自www.cnblogs.com/shineyoung/p/10462652.html
今日推荐
周排行