关于wait和notify的调用者问题

来源:7-3 notify方法

hellocp7

2019-12-03

老师你好,我有个疑问就是,目前你举得例子中,都是用到了synchronized关键字,也就是都存在多个线程竞争同一把锁的情况,并且调用wait和notify的时候也都是在同步代码块里面,通过那把锁调用了wait和notify方法。比如:

synchronized(object){
	...
	object.wait();
	...
}
synchronized(object){
	...
	object.notify();
	...
}

我有一个疑问就是是否可以在没有竞争锁的情况下,我单纯的就想让一个线程进入wait,也就是我没有新建一个object作为锁,此时我该如何调用wait方法?可以直接写wait()这个方法么?然后我想在另外一个线程里面做完某件事后调用notify方法唤醒这个线程又该如何实现?就是有可能两个线程之间没有任何联系,我单纯的想线程一打印1-100,然后到五十的时候停下,此时线程二开始打印1-100,等线程二打印完后,线程一在接着打印,这样该如何实现?

不好意思,可能问题有点多,谢谢老师。

写回答

1回答

悟空

2019-12-03

用wait无法实现 因为wait要求必须先获取锁。
可以用countdownlatch等工具实现,你可以搜一下工具的用法,也可以看我12月25日上线的并发工具类课程,里面有讲这个问题。

1
2
悟空
回复
hellocp7
是的,wait()和notify()这类方法,就是基于锁来沟通的,你看一下wait的源码注释,有写的。如果不在锁里调用,会抛出异常。谢谢小伙伴的支持,新课一定不会让你失望,一定是精品。
2019-12-03
共2条回复

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

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

2512 学习 · 939 问题

查看课程