*/
boolean await(long time, TimeUnit unit) throws InterruptedException;
/**
- 等待通知、中断或者规定线程截止日期已经过去则返回
*/
boolean awaitUntil(Date deadline) throws InterruptedException;
/**
- 唤醒一个等待线程,线程返回的前提是该线程获取到与Condition有关的锁
*/
void signal();
/**
- 唤醒所有等待线程,线程返回的前提是该线程获取到与Condition有关的锁
*/
void signalAll();
}
3.2 Lock接口定义
获取Condition必须通过Lock的newCondition()方法,这个在如下接口定义中可以找到结论。
/**
- Lock接口中定义了Condition的获取方式
*/
public interface Lock {
void lock();
void lockInterruptibly() throws InterruptedException;
boolean tryLock();
boolean tryLock(long time, TimeUnit unit) throws InterruptedException;
void unlock();
/**
- 调用 newCondition()方法返回一个Condition
*/
Condition newCondition();
}
3.3 使用案例
通过Lock和Condition来实现一个有界缓存队列,生产线程的向队列中添加数据,当队列满了的时候put()操作会被阻塞;反之,消费线程不断的从队列中取出数据,当队列为空时,take()操作会被阻塞。
package com.lizba.p6;
import org.omg.CORBA.Object;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**