首页 > 其他 > 详细

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

时间:2019-03-02 20:41:48      阅读:185      评论:0      收藏:0      [点我收藏+]
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() 实现简单的加减法同步

原文:https://www.cnblogs.com/shineyoung/p/10462652.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!