Java 线程池

1.线程池

private static final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(30, 30, 30, TimeUnit.SECONDS, new LinkedBlockingQueue<>(60), new ThreadPoolExecutor.AbortPolicy());

2.异步执行(主线程执行完了,子线程还没执行完)

public void testPool() throws InterruptedException {
        System.out.println("======start=======");
        for (int i = 0; i < 10; i++) {
            final int key = i;
            threadPoolExecutor.execute(() -> {
                test(key);
            });
        }
        System.out.println("=========end========");
}

3.主线程等待子线程执行完

public void testPool() throws InterruptedException {
        System.out.println("======start=======");
        for (int i = 0; i < 10; i++) {
            final int key = i;
            threadPoolExecutor.execute(() -> {
                test(key);
            });
        }
        threadPoolExecutor.shutdown();
        System.out.println("=========end========");
}

 4.执行带返回值的

public void testPool() throws InterruptedException, ExecutionException {
        System.out.println("======start=======");
        int result = 0;
        for (int i = 0; i < 10; i++) {
            final int key = i;
            Callable<Integer> callable = () -> test(key);
            Future<Integer> num = threadPoolExecutor.submit(callable);
            if (num.get() != null) {
                result = num.get();
            }
        }
        System.out.println("=====result====" + result);
        threadPoolExecutor.shutdown();
        System.out.println("=========end========");
    }

    private Integer test(int key) {
        System.out.println("=============" + key);
        if (key == 8) {
            System.out.println("====key===");
            return key;
        } else {
            return null;
        }

    }
posted @ 2019-01-11 13:06  诸葛子房  阅读(191)  评论(0编辑  收藏  举报