1.JAVA多线程(十六)Java多线程之Condition对象
1.1 什么是Condition?
Condition是在java 1.5中才出现的,它用来替代传统的Object的wait()、notify()实现线程间的协作,相比使用Object的wait()、notify(),使用Condition的await()、signal()这种方式实现线程间协作更加安全和高效。因此通常来说比较推荐使用Condition,阻塞队列实际上是使用了Condition来模拟线程间协作。
我们使用synchronized来控制同步,配合Object的wait()、notify()系列方法可以实现等待/通知模式。在Java SE5后,Java提供了Lock接口,相对于Synchronized而言,Lock提供了条件Condition,对线程的等待、唤醒操作更加详细和灵活。下图是Condition与Object的监视器方法的对比(摘自《Java并发编程的艺术》)
1.2 Condition使用样例
package com.yuanxw.chapter16;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
public class ConditionExample {
// 定义【重入锁】非公平锁
private static final ReentrantLock REENTRANT_LOCK = new ReentrantLock();
// 获得Condition实例
private static final Condition CONDITION = REENTRANT_LOCK.newCondition();
// volatile:内存可见性关键字,默认为没有生产,可以进行生产
private static volatile boolean isProducted = false;
// 生产数量
private static int num = 0;