ExecutorService 帶有返回值的使用

1、寫在前面
java.util.concurrent.ExecutorService 表述了異步執行的機制,可以讓任務在後 臺執行

2、代碼

public static void main(String[] args) {

        List<Integer> integers = new ArrayList<>();
        integers.add(1);
        integers.add(2);
        integers.add(3);
        integers.add(4);
        integers.add(5);
        integers.add(6);
        integers.add(7);
        integers.add(8);
        integers.add(9);
        integers.add(10);

        ExecutorService pool = Executors.newFixedThreadPool(3);

        for (int i = 0; i < integers.size(); i++) {
            Integer integer = integers.get(i);

            Callable<Boolean> run = new Callable<Boolean>() {
                @Override
                public Boolean call() throws Exception {
                    System.out.println("線程開始,執行的integer"+integer);
                    return Test(integer, pool);
                }
            };

            //可以讓線程阻塞
            Future future = pool.submit(run);

            Boolean isPay = false;
            try {
                System.out.println("得到返回值" + (Boolean) future.get());
                isPay = (Boolean) future.get();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
            }

            if (!isPay) {
                System.out.println("線程結束,退出循環");
                break;
            }

        }

        waitConfirmedTest(pool);
        System.out.println("結束----");
        pool.shutdownNow();

    }

    public static Boolean Test(Integer i, ExecutorService pool) {
        try {
            Thread.sleep(1000L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        if (i == 3) {
            return false;
        } else {
            return true;
        }
    }

    private static void waitConfirmedTest(ExecutorService pool) {

        while (true) {
           //isTerminated當調用shutdown()方法後,並且所有提交的任務完成後返回爲true;
            if (pool.isTerminated()) {
                try {
                    System.out.println("確認---ing");
                    Thread.sleep(9000L);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                break;
            }
        }

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