我正在读Java文档,它说通知方法不会立即放弃控制。也就是说,如果在调用通知方法之后,在同步代码块中保留了一些代码,那么它将首先完成剩余的代码,然后放弃控制。
synchronized(this) {
// line 1
notify();
//line 2
// line 3
}第2行和第3行仍将被执行。相同的功能是否适用于等待方法,即
synchronized(this) {
// line 1
wait();
//line 2
// line 3
}将执行第2行和第3行吗?
发布于 2015-12-26 10:09:47
不是的。来自wait()的文档
因此,点1对应于synchronized()语句;点2、3和4位于wait()方法中,点5对应于代码中的第2和第3行。
发布于 2015-12-26 10:08:25
这就是你刚刚读到的。wait调用之后的第2行和第3行只在线程调用notify的同步块完成后运行:
在当前线程放弃此对象的锁之前,唤醒的线程将无法继续。唤醒的线程将以通常的方式与可能正在此对象上主动竞争以同步的任何其他线程竞争。
(这是来自http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#notify()的
当然,这是因为两个线程在同一个(this)对象上同步。
https://stackoverflow.com/questions/34470265
复制相似问题