十四、Condition简述

37 阅读1分钟

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实现单向链表的效果