java 中CountDownLatch的简单示例,仅供参考测试。
/**
* CountDownLatch的使用demo
* 模拟高并发问题,没有Lock时执行会有问题
* @author administrator
*/
public class CountDownLatchTest implements Runnable{
/**
* 创建的并发线程数量
*/
private static final int NUM = 100;
/**
* 执行countDown()直到计数器为零时所有线程同时执行createOrder()
*/
private static CountDownLatch countDownLatch = new CountDownLatch(NUM);
private static int orderCode = 0;
private static Lock lock = new ReentrantLock();
@Override
public void run() {
try {
System.out.println("run------------------");
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
createOrder();
}
public void createOrder(){
lock.lock();
try {
System.out.println(Thread.currentThread().getName() + "==========" + orderCode);
orderCode++;
}finally {
lock.unlock();
}
}
public static void main(String [] args){
for(int i = 0;i < NUM;i++){
new Thread(new CountDownLatchTest()).start();
countDownLatch.countDown();
System.out.println("当前倒计时:" + countDownLatch.getCount());
}
}
}