- CountDownLatch 可以起到發令槍的作用,JDK 1.5 開始提供
- 用 CountDownLatch 實現並發訪問,在寫測試工具時希望達到某條件后,所有線程同時執行
- 也可以用 CountDownLatch 實現,某線程等待其他線程完成,進行最后的統一處理
代碼如下:
package constxiong.interview; import java.util.concurrent.CountDownLatch; /** * 測試使用100個線程,並發訪問和等待多線程完成后處理 * @author ConstXiong */ public class TestCountDownLatch2 { private static CountDownLatch cdl = new CountDownLatch(100); private static int count = 0; public static void main(String[] args) { testConcurrent(); // testDoAfterOtherThreadComplete(); } /** * 測試並發 do something... */ private static void testConcurrent() { for (int i = 0; i < 100; i++) { //啟動線程 new Thread(() -> { try { //當發令槍計數未減到 0 之前線程都會在此阻塞 cdl.await(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + ":" + System.currentTimeMillis() + " do something..."); }).start(); //發令槍計數減 1 cdl.countDown(); } } //測試等待多線程完成后處理 private static void testDoAfterOtherThreadComplete() { //啟動 100 個線程,對 count 遞增 for (int i = 0; i < 100; i++) { new Thread(() -> { count++; //發令槍計數減 1 cdl.countDown(); }).start(); } try { cdl.await(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("main thread print count : " + count); } }
- Java 自學經歷
- Java 面試題 H5
- Java 面試題小程序