账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    为什么这里的number不用volatile也能保证可见性
    36
    0
    class ShareData {
        private int number=0;
        private Lock lock=new ReentrantLock();
        private Condition condition=lock.newCondition();
    
        public void sub() {
            lock.lock();
                try {
                    while(number==0){
                        condition.await();
                    }
                    number--;
                    System.out.println(Thread.currentThread().getName()+"\t"+number);
                    condition.signal();
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    lock.unlock();
                }
        }
        public void add(){
            lock.lock();
            try {
                while(number!=0){
                    condition.await();
                }
                number++;
                System.out.println(Thread.currentThread().getName()+"\t"+number);
                condition.signal();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                lock.unlock();
            }
        }
    }
    /**
     * 初始值为零的变量,两个线程对其交替操作,一个加1,一个减一,来5轮
     */
    public class ProdConsumer_TraditionDemo {
        public static void main(String[] args) {
            ShareData shareData = new ShareData();
            new Thread(()->{
                for (int i = 0; i < 5; i++) {
                    shareData.add();
                }
            },"A").start();
            new Thread(()->{
                for (int i = 0; i < 5; i++) {
                    shareData.sub();
                }
            },"B").start();
        }
    
    }
    
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部