1 其实http://www.itzhai.com/the-introduction-and-use-of-a-countdownlatch.html 已经讲的很好了。
为什么又要写一下呢?
2 因为有一些没提到的,和新发现的。
2.1 CountDownLatch最重要的方法是countDown()和await(),前者主要是倒数一次,后者是等待倒数到0,如果没有到达0,就只有阻塞等待了。
2.2
[crayon-56579710323cb221120303/]
这个方法可以用起来,他是这么用的:
end.await(1,TimeUnit.SECONDS);
如果执行后,1秒没有完成,他就等不及了,会直接宣布结束,但是后面的线程依然会执行Game Start
No.7 arrived
Game Over
No.8 arrived
No.10 arrived
No.9 arrived
No.6 arrived
No.2 arrived
No.1 arrived
No.3 arrived
No.5 arrived
No.4 arrived
2.3. 关于2.2中TimeUnit的用法,可以点进去看API说明。有很多实用方法。
System.out.println(TimeUnit.SECONDS.convert(1, TimeUnit.MINUTES));
输出:1 分钟转60秒
System.out.println(TimeUnit.SECONDS.toMinutes(600));
输出:600秒转10Minutes
3 ExecutorService用法
3.1 Executors.newFixedThreadPool(10);
3.2 exec.submit(run);(与exec.execute(run);区别)
将Runnable的对象传递给ExecutorService的submit方法,则该run方法自动在一个线程上执行,并且会返回执行结果Future对象,但是在该Future对象上调用get方法,将返回null。
3.3 exec.shutdown();
4 源码解析
Java多线程系列--“JUC锁”09之 CountDownLatch原理和示例 - 如果天空不死 - 博客园 http://www.cnblogs.com/skywang12345/p/3533887.html