Condition
Condition像是一个工具类,是一个单向链表,为lock锁提供了await和signal方法。
await方法和wait方法一样,可以让线程释放锁,并且被挂起
signal可以唤醒await方法挂起的线程
Condition对象创建
public class test {
private static ReentrantLock lock = new ReentrantLock();
public static void main(String[] args) {
Condition condition = lock.newCondition();
}
}
public Condition newCondition() {
return sync.newCondition();
}
final ConditionObject newCondition() {
return new ConditionObject();
}
Condition对象其实是ConditionObject类的对象
一个lock可以创建多个condition对象,注意,condition对象是无法唤醒其他condition对象挂起的线程
condition对象有两个属性firstWaiter和lastWaiter,分别表示单向链表的首部和尾部节点
private transient Node firstWaiter;
private transient Node lastWaiter;
虽然node对象有prev和next,但是conditionObject是不用这两个属性的,这两个属性值为null。conditionObject会使用nextWaiter实现单向链表的效果