一、学习ConditionVariable之前的复习
如果你不懂wait()、notify()怎么使用,最好先复习下我之前的这篇博客,怎么使用wait()、notify()实现生产者和消费者的关系
java之wait()、notify()实现非阻塞的生产者和消费者
二、看下ConditionVariable源代码实现
package android.os;
/**
* Class that implements the condition variable locking paradigm.
*
* <p>
* This differs from the built-in java.lang.Object wait() and notify()
* in that this class contains the condition to wait on itself. That means
* open(), close() and block() are sticky. If open() is called before block(),
* block() will not block, and instead return immediately.
*
* <p>
* This class uses itself as the object to wait on, so if you wait()
* or notify() on a ConditionVariable, the results are undefined.
*/
public class ConditionVariable
{
private volatile boolean mCondition;
/**
* Create the ConditionVariable in the default closed state.
*/
public ConditionVariable()
{
mCondition = false;
}
/**
* Create the ConditionVariable with the given state.
*
* <p>
* Pass true for opened and false for closed.
*/
public ConditionVariable(boolean state)
{
mCondition = state;
}
/**
* Open the condition, and release all threads that are blocked.
*
* <p>
* Any threads that later approach block() will not block unless close()
* is called.
*/
public void open()
{
synchronized (this) {
boolean old = mCondition;
mCondition = true;
if (!old) {
this.notifyAll();
}
}
}
/**
* Reset the condition to the closed state.
*
* <p>
* Any threads that call block() will block until someone calls open.
*/
public void close()
{
synchronized (this) {
mCondition = false;
}
}
05-29
1199