Javaの並行-JUC-たCountDownLatchカウントダウンラッチデバイス - マルチスレッドの完了を待ってから放し - シングルユース

その(要約ポイント)の場合

  • たCountDownLatchのカウントダウンラッチ装置、
  • 1-N-1のスレッドが行われ、他のマルチスレッドの仕事を待って許可します。
  • (複数のExcelを解決シート、及び最終的には完全に解析されたウェイト、シート解決動作を完了するために、すべてのスレッドのメインスレッドが待機を達成するために、最も簡単に参加することです)
  • たCountDownLatchラッチ=新しいたCountDownLatch(2); //使用は、ラッチがメインスレッド待ちに押し込まれるカウントダウン; Nノード、スレッドまたはN-ステップのセット
  • latch.countDown();
  • (1000 TimeUnit.MILLISECONDS)latch.await; //ブロック現在のスレッドのカウンタが0になるまで
  • オリジナルリンク:

記事の一覧から学びます

  • 言うことALiBaBaJavaCodingGuideLines何か:
    • より良いスレッドプールを使用してください!

簡単なテスト1テスト1


public class Test03_countdownlatch {
    public static void main(String[] args) {

        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("hello ");
            }
        };
        Thread thread1 = new Thread(runnable);
        Thread thread2 = new Thread(runnable);
        System.out.println("all thread finish");
    }
}

2.結果1:スレッドが時間内に終了しなかった、メインスレッドが終わったので、最初の印刷仕上げ

all thread finish
hello 
hello 

現在のサブスレッドのメインスレッドが待機を強制3.試験2は、サブスレッドの結合方法によって終了されます

 public static void main(String[] args) {

        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("hello ");
            }
        };
        Thread thread1 = new Thread(runnable);
        Thread thread2 = new Thread(runnable);

        thread1.start();
        thread2.start();

        try {
            // 迫使主线程通过join方法等待当前的子线程执行完毕
            thread1.join();
            // 主线程第二次等待
            thread2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("all thread finish");
    }

テスト結果

hello 
hello 
all thread finish

テスト3は、ラッチダウンカウントするために使用されます

public static void main(String[] args) {

        Runnable runnable = () -> System.out.println("hello ");
        Thread thread1 = new Thread(runnable);
        Thread thread2 = new Thread(runnable);

        // 使用倒计数门闩器 ,迫使主线程进入等待 ;设置N个结点 ,n个线程或者步骤都可以
        CountDownLatch latch = new CountDownLatch(2);
        thread1.start();
        latch.countDown();
        thread2.start();
        latch.countDown();

        try {
            // 阻塞当前线程,直到计数器变为0; await(long time);也可以带时间!
            latch.await(1000, TimeUnit.MILLISECONDS);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("all thread finish");


    }

テスト結果

hello 
hello 
all thread finish

おすすめ

転載: www.cnblogs.com/zhazhaacmer/p/11365805.html