问题概述:设计四个线程对象,两个线程实现加操作,两个线程实现减操作
注意一个问题:经常会用if(this.flag==false)来判断,用if并不能实现进程同步,会出现负数。
class Resource{
private int num=0;// private boolean flag=true;//加减操作 public synchronized void add() throws InterruptedException { while(this.flag==false) { super.wait(); } Thread.sleep(400); this.num++; System.out.println("【加法操作】"+ Thread.currentThread().getName() +"num="+this.num); this.flag=false; super.notifyAll(); } public synchronized void sub() throws InterruptedException { while(this.flag==true) { super.wait(); } Thread.sleep(600); this.num--; System.out.println("【减法操作】"+ Thread.currentThread().getName() +"num="+this.num); this.flag=true; super.notifyAll(); } } class AddThread implements Runnable{ private Resource resource; public AddThread(Resource resource) { this.resource=resource; } @Override public void run() { for(int x=0;x<50;x++) { try { this.resource.add(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } class SubThread implements Runnable{ private Resource resource; public SubThread(Resource resource) { this.resource=resource; } @Override public void run() { for(int x=0;x<50;x++) { try