Condition
和 Object
中的 await
方法在使用方式和功能上有一些区别
-
等待条件:
Condition
的await
方法是用于等待特定条件的发生。在调用await
方法时,线程会释放持有的锁,并进入等待状态,直到其他线程通过signal
或signalAll
方法发出信号来满足条件,或者等待超时,才会重新竞争锁并继续执行。一般情况下,Condition
需要与某个锁(如ReentrantLock
)关联使用。 而Object
的await
方法是使用synchronized
关键字配合wait
方法来实现等待操作,也是在某个条件满足前让线程进行等待。 -
条件的精确控制:
Condition
提供了更加精确的线程等待/唤醒机制。可以通过await
、signal
和signalAll
方法来等待指定条件、通知等待线程和通知所有等待线程。这种精确控制可以帮助我们设计更加灵活和高效的线程同步机制。 而Object
中的等待/唤醒机制比较简单,只能使用wait
、notify
和notifyAll
方法来进行等待和唤醒操作,无法直接指定特定的条件。
总的来说,Condition
提供了比 Object
更加灵活、精确的线程等待/唤醒机制,适用于一些需要更细粒度控制的场景。但在一般情况下,如果只是简单的线程等待和唤醒操作,使用 Object
的 wait
和 notify
方法已经足够了
--源于chatgpt
================
简单来说 object.await() 是配合synchronized
使用的Condition
是基于Lock类构造, 用在有多个Lock类时, 精准控制对应线程的await/notiy