publicclassCountDownLatchDemo{ publicstaticvoidmain(String[] args)throws InterruptedException { int totalThread = 3; long start = System.currentTimeMillis(); CountDownLatch countDown = new CountDownLatch(totalThread); for(int i = 0; i < totalThread; i++) { final String threadName = "Thread " + i; new Thread(() -> { System.out.println(String.format("%s\t%s %s", new Date(), threadName, "started")); try { Thread.sleep(1000); } catch (Exception ex) { ex.printStackTrace(); } System.out.println(String.format("%s\t%s %s", new Date(), threadName, "ended")); countDown.countDown(); }).start();; } countDown.await(); long stop = System.currentTimeMillis(); System.out.println(String.format("Total time : %sms", (stop - start))); } }
执行结果
1 2 3 4 5 6 7
Sun Jun 19 20:34:31 CST 2016 Thread 1 started Sun Jun 19 20:34:31 CST 2016 Thread 0 started Sun Jun 19 20:34:31 CST 2016 Thread 2 started Sun Jun 19 20:34:32 CST 2016 Thread 2 ended Sun Jun 19 20:34:32 CST 2016 Thread 1 ended Sun Jun 19 20:34:32 CST 2016 Thread 0 ended Total time : 1072ms
publicstaticvoidmain(String[] args){ int totalThread = 5; CyclicBarrier barrier = new CyclicBarrier(totalThread); for(int i = 0; i < totalThread; i++) { String threadName = "Thread " + i; new Thread(() -> { System.out.println(String.format("%s\t%s %s", new Date(), threadName, " is waiting")); try { barrier.await(); } catch (Exception ex) { ex.printStackTrace(); } System.out.println(String.format("%s\t%s %s", new Date(), threadName, "ended")); }).start(); } } }
执行结果如下
1 2 3 4 5 6 7 8 9 10
Sun Jun 19 21:04:49 CST 2016 Thread 1 is waiting Sun Jun 19 21:04:49 CST 2016 Thread 0 is waiting Sun Jun 19 21:04:49 CST 2016 Thread 3 is waiting Sun Jun 19 21:04:49 CST 2016 Thread 2 is waiting Sun Jun 19 21:04:49 CST 2016 Thread 4 is waiting Sun Jun 19 21:04:49 CST 2016 Thread 4 ended Sun Jun 19 21:04:49 CST 2016 Thread 0 ended Sun Jun 19 21:04:49 CST 2016 Thread 2 ended Sun Jun 19 21:04:49 CST 2016 Thread 1 ended Sun Jun 19 21:04:49 CST 2016 Thread 3 ended