多線程執行任務等待所有任務執行完畢

@Test
    public void testMultiThread(){
        try {
            final CountDownLatch countDownLatch = new CountDownLatch(2);//計數器
            ExecutorService executorService = Executors.newCachedThreadPool();
            Future<Boolean> work1 =  executorService.submit(new Callable<Boolean>() {
                @Override
                public Boolean call() throws Exception {
                    System.out.println("線程1開始執行..........");
                    Thread.sleep(5000);
                    System.out.println("線程1執行完了............");
                    countDownLatch.countDown();
                    return true;
                }
            });
            Future<Boolean> work2 = executorService.submit(new Callable<Boolean>() {
                @Override
                public Boolean call() throws Exception {
                    System.out.println("線程2開始執行..........");
                    Thread.sleep(5000);
                    System.out.println("線程2執行完了............");
                    countDownLatch.countDown();
                    return true;
                }
            });
            Boolean work1Flag =  work1.get();//線程1返回值
            Boolean work2Flag = work2.get();//線程2返回值
            System.out.println("運行結果:線程1=" + work1Flag + "線程2=" + work2Flag);
            countDownLatch.await();
            System.out.println("執行結束");
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }


執行結果如下:

線程1開始執行..........
線程2開始執行..........
線程2執行完了............
線程1執行完了............
運行結果:線程1=true線程2=true
執行結束

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章