与传统的等待通知机制相比,使用Condition接口/实现的优点是什么?在这里,我引用道格·李(Doug Lea)的评论:
条件将对象监视方法(wait,notify和notifyAll)分解为不同的对象,从而通过与任意Lock实现结合使用,从而使每个对象具有多个等待集。如果Lock替换了同步方法和语句的使用,而Condition替换了Object监视器方法的使用。
我看到这是实现等待/通知机制的一种更面向对象的方式。但是,相对于前者,有什么优势吗?
如上所述,关于 条件接口* 有许多 优点 ,一些重要的如下: *
条件接口 附带 两个 额外的 方法 :
1)布尔值awaitUntil(日期期限)抛出InterruptedException: 导致当前线程等待,直到发出信号或被中断或指定的期限过去。
2)awaitUninterruptible(): 使当前线程等待,直到发出信号为止。
如果当前线程进入此方法时已设置其中断状态,或者在等待时被中断,它将继续等待直到发出信号。当它最终从该方法返回时,其中断状态仍将被设置。
以上两种方法在对象类的默认监视器中不存在,在某些情况下,我们希望设置线程等待的截止日期,然后我们可以通过Condition接口来实现。
在某些情况下,我们不希望线程被中断,而希望当前线程等待,直到收到信号为止,然后我们可以使用条件接口中存在的awaitUninterruptible方法。
有关更多信息,条件接口Java文档:
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/locks/Condition.html#awaitUntil%28java.util.Date%29