CountDownLatch
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TestCountDownLatch {
public static void main(String[] args) throws InterruptedException {
long start = System.currentTimeMillis();
// 开始的倒数锁
final CountDownLatch begin = new CountDownLatch(1);
// 结束的倒数锁
final CountDownLatch end = new CountDownLatch(10000);
List<String> list=new ArrayList<String>();
// 十名选手
final ExecutorService exec = Executors.newFixedThreadPool(10);
for (int index = 0; index < 10000; index++) {
final int NO = index;
Runnable run = new Runnable() {
public void run() {
try {
begin.await();
System.out.println(NO);
String temp="AA"+NO;
list.add(temp);
Thread.sleep((long) (Math.random() * 10));
} catch (InterruptedException e) {
} finally {
end.countDown();
}
}
};
System.out.println(run);
exec.submit(run);
}
System.out.println("Game Start");
begin.countDown();
end.await();
System.out.println("Game Over");
exec.shutdown();
System.out.println("num:"+list.size());
// for(String s:list){
// System.out.println("数据打印:"+s);
// }
System.out.print("共计用时 ");
System.out.println(System.currentTimeMillis() - start);
}
}
相关文章
- 跟面试官讲解CountDownLatch源码设计原理
- java高级---->Thread之CountDownLatch的使用
- 面试官:CountDownLatch 与 CyclicBarrier 的使用场景?有什么区别?
- java多线程CountDownLatch
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
- java多线程对CountDownLatch的使用实例
- countDownLatch.await()与thread.join()区别
- Java高并发专题之16、JUC中的CountDownLatch
- 并发库应用之九 & 到时计数器CountDownLatch应用
- Java中使用CountDownLatch进行多线程同步
- java多线程-CountDownLatch
- 多线程并发之CountDownLatch阻塞等待
- 【并发编程082】说说对CountDownLatch的理解?