JUC之LockSupport与Condition
一、LockSupport
-
park()
- 阻塞当前线程
- 调用unpark、或者中断该线程,唤醒
-
unpark()
- 唤醒线程
这个工具主要用于对线程进行一个阻塞、唤醒处理。
二、Condition
Condition是一套等待/通知方法的接口,其 实现是在AQS的ConditionObject中,主要的实现方式是采用:
- 同步队列
- 等待队列
1、等待队列处理
如果调用锁的condition对象的await方法,那么该线程就会构造成节点进入等待队列。进入等待队列之后,唤醒该线程需要其它线程调用相同的contion上的signal方法,尝试唤醒,并且进入同步队列。
2、同步队列处理
经过唤醒之后的线程就会进入同步队列,在同步队列中,执行获取锁的操作,与一般情况下线程获取同步状态的实现是一致的。
三、Usage
Condition c1=lock.newCondition();
Condition c2=lock.newCondition();
- 一个锁可以有多个condition,这意味着一个锁可以有多个队列,包括同步、等待队列;这是Synchronized所不能够拥有的一个特性,他的wait、signal都是操作同一个队列。