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回答
-
这里lock.notify()和lock.wait()是必须放到synchronized(lock)同步代码块之中吗?
是的,wait必须放在synchronized中。
你可以放在外面试一下,会抛出异常,Java设计成这样的原因,后面的小节有讲。
两个synchronized轮流,确实是串行,但是本次需求就是交替打印,就是要求我们串行。
112019-10-24
相似问题