请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

为什么有时候可以不使用object.wait()而可以使用wait()

    public void produce() {
        synchronized (this) {
            while (mBuf.isFull()) {
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            mBuf.add();
            notifyAll();
        }
    }

    public void consume() {
        synchronized (this) {
            while (mBuf.isEmpty()) {
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            mBuf.remove();
            notifyAll();
        }
    }

代码段摘至网络,不是很清楚运行时 wait() 和notifyAll() 为什么不报错, 这里的wait() 是如何持有monitor的
代码出处地址:https://www.jianshu.com/p/25e243850bd2?appinstall=0

正在回答

1回答

就是这个对象this本身,进入syn代码块所以持有锁。每个对象都有wait方法。

0 回复 有任何疑惑可以回复我~
  • 提问者 ych_1997 #1
    明白了,代码把本类当做一个锁,在Test中 类的对象.produce(){wait()} ,相当于 锁.wait()
    回复 有任何疑惑可以回复我~ 2019-11-13 09:35:06
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信