使用synchronized wait() notifyall() 实现简单的加减法同步

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();
        
    }
}

猜你喜欢

转载自www.cnblogs.com/shineyoung/p/10462652.html