条件变量的await()释放锁吗? 回复内容

1楼scort 3月8日回答

await的doc有这么一句啊The lock associated with this Condition is atomically released

2楼youngs 3月8日回答

谢邀,
答案:

会;
是;

await()的作用是能够让其他线程访问竞争资源,所以挂起状态就是要释放竞争资源的锁。 在java
SE5的java.util.concurrent类库中,使用互斥并允许任务挂起的基本类就是Condition,你可以通过await()来挂起一个任务,当外部条件改变时,意味着某个任务可以继续执行,你可以通过signal()来通知这个任务。

每个lock()的调用必须紧跟一个try-finally子句,用来保证在所有情况下都可以释放锁。任务在可以调用await(),signal(),signalAll()之前,必须拥有这个锁。