同步工具类-闭锁
2017-01-05 13:01
274 查看
背景:多个线程,同时启动(像比赛一样,从起跑线开跑)
思想:那就搞一个起跑线或者门之类的,线程准备好了,开门,大家跑吧
注:参考《Java Concurency in Practice》
思想:那就搞一个起跑线或者门之类的,线程准备好了,开门,大家跑吧
/** * @author yisea * @Description: 同步工具类:闭锁 */ public class TestHarness implements Runnable{ public long timeTasks(int nThreads, final Runnable task) throws InterruptedException{ final CountDownLatch startGate = new CountDownLatch(1); final CountDownLatch endGate = new CountDownLatch(nThreads); for(int i = 0; i < nThreads; i++){ Thread t = new Thread(){ public void run(){ try { startGate.await();// 我ready了,其他线程兄弟快点,等着呢 try { task.run(); // go go go } finally { endGate.countDown(); // 结束门-1(我结束了哈,你们记得打卡~) } } catch (InterruptedException e) { e.printStackTrace(); } } }; t.start(); } long start = System.nanoTime(); startGate.countDown();// 启动门-1 开启 endGate.await(); // 结束门,主线程等待所有线程都结束,方可开门让你走 long end = System.nanoTime(); return end - start; // 并发时间差 } @Override public void run() { System.out.println("Go!!" + System.currentTimeMillis()); } public static void main(String[] args) { TestHarness mainTask = new TestHarness(); try { Long fu = mainTask.timeTasks(10, mainTask); System.out.println(fu); } catch (InterruptedException e) { e.printStackTrace(); } } }
注:参考《Java Concurency in Practice》
相关文章推荐
- 同步工具类一:闭锁(java.util.concurrent.CountDownLatch)
- java并发之同步工具类一之闭锁Latch
- 同步工具类闭锁,栅栏,信号量
- 同步工具类--闭锁
- Java同步工具类——闭锁
- 同步工具类--闭锁、信号量、栅栏的总结
- 同步工具类--闭锁、信号量、栅栏的总结
- 同步容器类和工具类4——闭锁
- JUC同步工具类——信号量、闭锁、栅栏、交换器
- 同步工具类一:闭锁(java.util.concurrent.CountDownLatch)
- Java并发编程的艺术(八)——闭锁、同步屏障、信号量详解
- 同步工具类
- 并发容器、同步容器、同步工具类
- Java并发——同步工具类
- 多线程编程13-----Exchanger同步工具类实现两线程数据交换
- Java并发:同步工具类详解(CountDownLatch、CyclicBarrier、Semaphore)
- Java并发编程 06 闭锁、同步屏障、信号量详解
- Java并发编程的艺术(八)——闭锁、同步屏障、信号量详解
- Java并发编程之2——同步工具类的使用(CountDownLatch,CyclicBarrier,BlockungQueue,Semaphore)
- 23-同步工具类之CountDownLatch、CyclicBarrier和Semaphore