Java多线程系列(6)

来源:互联网 发布:gbgb888域名永久获取 编辑:程序博客网 时间:2024/04/30 01:25

Wait & Notify

WN是一种同步机制,更是一种通信机制,它必须与 同步锁结合使用。因为Wait-Notify本身存在race condition。

但是这不得不让我们思考WN机制得必要性:1)wait()与sleep()在对待已获取得lock时不同,前者会在操作之前自动放弃lock;2)wait在于等待某事物得出现,等待条件没有满足当然可以等待

没有同步得WN可能得导致RC,举例如下:

1)Thread1测试条件,不满足,需要等待;

2)Thread2设定此条件

3)Thread2调用notify()

4)Thread1调用wait()等待

其结果是Thread1永远等待

另外:wait()和nitify()方法应与Lock对象保持一致。

举例:

wait():

synchronized (object){
 if (flag){
  object.wait()
 }
 else{
  ...
 }
}

notify():

synchronized (object){
 if (!flag){
  object.notify();
 }
 else{
  ...
 }
}

原创粉丝点击