LockSupport工具
提供的方法void park():阻塞当前线程,如果调用unpark()或者当前线程被中断,才能从park()方法中返回
void park(long nanos):阻塞当前线程最多nanos纳秒
void parkUntil(long deadline):阻塞当前线程知道deadline
void unpark(Thread thread):唤醒处于等待状态的线程thread
Condition接口
任意一个java对象,都有一组监视器方法(定义于Object对象上),如wait(),notify(),notifyAll(),与synchronized关键字配合,可以实现等待/通知模式。
提供的方法
void await():当前线程进入等待状态直到被通知或中断,当前线程进入运行状态且从await()返回的条件是:(1)其它线程调用该condition的signal()或signalAll()方法,而当前线程被选中唤醒;(2)其它线程(调用interrupt())中断该线程;(3)如果当前线程从await()返回,说明其获得了condition对象的锁。
void signal():唤醒一个等待在condition上的线程,该线程从await()返回时必须获得该condition的锁
void signalAll():唤醒所有等待在condition上的线程,能够返回的线程必须获得condition的锁
condition对象如何创建
调用Lock方法的newCondition(),如
Lock lock = new ReentrantLock();
Condition condition = lock.newCondition();
分别新建2个condition对象。如果队列已满,则阻塞当前插入线程,否则插入元素,且唤醒一个获取线程;如果队列已空,则阻塞当前获取线程,否则获取元素,并唤醒一个插入线程。调用condition的方法时必须获取对象的锁。