lock.notify()和lock.wait()的位置问题

来源:7-7 交替打印

向远之航

2019-10-24

看了老师这节讲的轮流打印奇偶数第二种方法,老师将lock.notify()和lock.wait()都放到了synchronized(lock)代码块当中。我想请教一下,这里lock.notify()和lock.wait()是必须放到synchronized(lock)同步代码块之中吗。假设有一种情况,线程除了打印奇偶数之外,还要单独干一点自己的事情,那部分可以放到同步代码块之外,这时候,lock.wati()可以放到synchronized(lock)同步代码块之外吗?或者同样是老师的例子,我想提高线程运行的效率,进入synchronized(lock)同步代码块之后就只将count++,在synchronized(lock)同步代码块之外进行控制台的打印,还是使用lock.notify()和lock.wait()方法是否能够实现呢?因为如果只是synchronized同步代码块在两个线程里面轮流执行,并没有同时工作的情况,我想这样串行的效果和单线程也没啥区别了吧?并不能提高效率。希望得到老师的解答!

写回答

1回答

悟空

2019-10-24

这里lock.notify()和lock.wait()是必须放到synchronized(lock)同步代码块之中吗?

是的,wait必须放在synchronized中。

你可以放在外面试一下,会抛出异常,Java设计成这样的原因,后面的小节有讲。


两个synchronized轮流,确实是串行,但是本次需求就是交替打印,就是要求我们串行。

1
1
向远之航
谢谢解答!
2019-10-24
共1条回复

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

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

2512 学习 · 939 问题

查看课程