我正在阅读Java文档,它说通知方法它不会立即放弃控件。也就是说,如果在调用notify方法后同步代码块中仍然存在一些代码,那么它将首先完成剩余的代码,然后放弃该控件。
synchronized(this) {
// line 1
notify();
//line 2
// line 3
}
第2行和第3行仍将执行。
等待方法的功能是否相同synchronized(this) {
// line 1
wait();
//line 2
// line 3
}
第2行和第3行会被执行吗?
答案 0 :(得分:1)
这是你刚读过的内容。 wait
调用后的第2行和第3行只会在调用notify
的线程的同步块完成后运行:
在当前线程放弃对此对象的锁定之前,唤醒的线程将无法继续。唤醒的线程将以通常的方式与可能主动竞争同步此对象的任何其他线程竞争
(这是来自http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#notify())
当然这是因为两个线程在同一个(this
)对象上同步。
答案 1 :(得分:1)
没有。来自wait()
的文档:
因此,第1点对应synchronized()
语句;点2 3和4在wait()
方法中,点5对应于代码中的第2行和第3行。