wait()方法的几个要点
-
wait()和notify()机制,本质上是:基于条件的等待-通知模式。它是用于线程间通信的技术手段.
-
wait()和notify()必须是成对出现的,单一的wait()和notify()是没有意义的。wait()和notify()通常位于俩个独立的线程中,来实现这俩个线程间的通信
-
对状态变量的访问需要进行同步处理
-
既然是基于条件的等待-通知机制(或者说条件等待队列),这里的条件即为:状态变量。
由于会涉及到俩个或多个线程并发对此状态变量进行访问或修改,那么要想实现状态变量的一致性,我们就需要对状态变量的访问代码进行同步处理(发生race condition的地方都需要进行同步处理)。 -
"条件等待"、"条件通知",不管是"等待"动作的执行,还是"通知"动作的执行,都依赖于"条件"。这俩个动作都需要和"条件"作为一个整体来处理。即: "条件"变量的访问和"等待"、"通知"动作的执行要求具有原子性,它们要作为同一个动作同时执行
-
wait的spurious wakeup问题
a thread can wake up from waiting without ever having received a notification -
wait的典型用法
synchronized(lock){
while(!condition){
lock.wait();
}
}
参考文献
2.其他
网友评论