请稍等 ...
×

采纳答案成功!

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

关于wait和notify的调用者问题

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

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

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

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

正在回答 回答被采纳积分+3

1回答

悟空 2019-12-03 13:18:24

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

1 回复 有任何疑惑可以回复我~
  • 提问者 hellocp7 #1
    了解,所以wait()和notify()这类方法,是不是就是基于锁来沟通的?
    
    已经对你二十五号要上的课迫不及待了。悟空出品,必属精品!
    回复 有任何疑惑可以回复我~ 2019-12-03 13:36:52
  • 悟空 回复 提问者 hellocp7 #2
    是的,wait()和notify()这类方法,就是基于锁来沟通的,你看一下wait的源码注释,有写的。如果不在锁里调用,会抛出异常。谢谢小伙伴的支持,新课一定不会让你失望,一定是精品。
    回复 有任何疑惑可以回复我~ 2019-12-03 13:44:51
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信