スレッドプールは実行済みかどうかを判断する

1220 ワード

メソッド1.shutdownメソッドを使用すると、スレッドプールが新しいスレッドを受信し続けないようにし、スレッドがない後、すべてのスレッドが実行されたかどうかをループで判断するまで
public static void main(String[] args) throws ExecutionException, InterruptedException {
        ExecutorService exec = Executors.newFixedThreadPool(4);
        for (int i = 0;i<10000;i++) {
            exec.execute(() -> System.out.println("aaaaaaaaaaaaaaaaaaaaaa"));
        }
        exec.shutdown();
        while(true){
            if(exec.isTerminated()){
                System.out.println("          !");
                break;
            }
            Thread.sleep(1000);
        }
    }

方法2.shutdownによってスレッドプールが新しいスレッドを受信していない場合、awaitTerminationを使用して戻り値trueによってスレッドのすべての実行が完了したと判断する
public static void main(String[] args) throws ExecutionException, InterruptedException {
        for (int i = 0;i<10000;i++) {
            exec.execute(() -> System.out.println("aaaaaaaaaaaaaaaaaaaaaa"));
        }
         exec.shutdown();
//    、            ,           ,      ,          。
         boolean flag = exec.awaitTermination(1, TimeUnit.MINUTES);
        if(flag){
            System.out.println("   aaaa");
        }
    }