说明:参考《Java多线程核心技术》
8、Condition类
Condition类:可以实现多路通知功能,也就是在一个Lock对象里面创建多个Condition(即对象监视器)实例,线程对象可以注册在指定的Condition中,从而可以有选择性的进行线程通知,在调度线程上更加灵活。
public class ConditionService {
private Lock lock = new ReentrantLock();
public Condition condition = lock.newCondition();
public void await() {
try {
lock.lock();
System.out.println("aWait time = " + System.currentTimeMillis());
condition.await();
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
lock.unlock();
}
}
public void signal (){
try {
lock.lock();
System.out.println("signal time = " + System.currentTimeMillis());
condition.signal(); // Wakes up one waiting thread.
}finally {
lock.unlock();
}
}
}
public class ThreadA extends Thread{
private ConditionService service;
public ThreadA(ConditionService service) {
super();
this.service = service;
}
@Override
public void run() {
service.await();
}
}
public class ConditionServiceTest {
public static void main(String[] args) throws InterruptedException {
ConditionService service = new ConditionService();
ThreadA threadA = new ThreadA(service);
threadA.start();
ThreadA.sleep(3000);
service.signal();
}
}
/**
await time = 1547041173570
signal time = 1547041176580
*/
说明:Object类中的wait()方法相当于Condition类中的await()方法
Object类中的wait(long timeout)方法相当于Condition中的await(long time, TimeUnit unit)方法
Object类中的notify()方法相当于Condition类中的signal()方法
Object类中的notifyAll()方法相当于Condition类中的signalAll()方法