1、特点

可以传入线程的数量,不传入,则默认使用当前计算机中可用的cpu数量

能够合理的使用CPU进行对任务操作(并行操作)

适合使用在很耗时的任务中

底层用的ForkJoinPool 来实现的。 ForkJoinPool的优势在于,可以充分利用多cpu,多核cpu的优势,把一个任务拆分成多个“小任务”分发到不同的cpu核心上执行,执行完后再把结果收集到一起返回。

2、创建实例

ExecutorService executorService = Executors.newWorkStealingPool();

或者

ExecutorService executorService = Executors.newWorkStealingPool(2);

3、传参实例

        ExecutorService executorService = Executors.newWorkStealingPool(2);
        for (int i = 1; i < 10; i++) {
            int finalI = i;
            executorService.execute(() -> {
                try {
                    System.out.println(finalI);
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            });
        }
        Thread.sleep(10000);//这里让主线程等待子线程执行完毕,也可以使用计数器的方式
        executorService.shutdown();

这里设置了最大线程数为2,则每隔1秒输出2个数字。

4、不传参实例

        ExecutorService executorService = Executors.newWorkStealingPool();
        for (int i = 1; i < 10; i++) {
            int finalI = i;
            executorService.execute(() -> {
                try {
                    System.out.println(finalI);
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            });
        }
        Thread.sleep(10000);//这里让主线程等待子线程执行完毕,也可以使用计数器的方式
        executorService.shutdown();

这里没有设置线程数,所以会根据你设备的cpu核心数来创建线程,我的是4核cpu,所以会每隔1秒输出4个数字。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐