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

来源:7-2 wait方法

ych_1997

2019-11-12

    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回答

悟空

2019-11-12

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

0
1
ych_1997
明白了,代码把本类当做一个锁,在Test中 类的对象.produce(){wait()} ,相当于 锁.wait()
2019-11-13
共1条回复

线程八大核心+Java并发原理及企业级并发解决方案

完整的并发知识网络+丰富的工作内容分享+50余道并发高频面试题

2512 学习 · 939 问题

查看课程