ExecutorService 带有返回值的使用

1、写在前面
java.util.concurrent.ExecutorService 表述了异步执行的机制,可以让任务在后 台执行

2、代码

public static void main(String[] args) {

        List 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 run = new Callable() {
                @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;
            }
        }

    }

你可能感兴趣的:(Java-初识-精通)