可以为Java 8 parallel stream指定自定义线程池吗?我哪儿都找不到.
假设我有一个服务器应用程序,我想使用并行流.但是这个应用程序很大,而且是多线程的,所以我想把它划分开来.我不希望在applicationblock任务的一个模块中有一个运行缓慢的任务从另一个模块中删除.
如果我不能为不同的模块使用不同的线程池,这意味着我不能在大多数实际情况下安全地使用并行流.
试试下面的例子.在不同的线程中执行一些CPU密集型任务.
public class ParallelTest {
public static void main(String[] args) throws InterruptedException {
ExecutorService es = Executors.newCachedThreadPool();
es.execute(() -> runTask(1000)); //incorrect task
es.execute(() -> runTask(0));
es.execute(() -> runTask(0));
es.execute(() -> runTask(0));
es.execute(() -> runTask(0));
es.execute(() -> runTask(0));
es.shutdown();
es.awaitTermination(60, TimeUnit.SECONDS);
}
private static void runTask(int delay) {
range(1, 1_000_000).parallel().filter(ParallelTest::isPrime).peek(i -> Utils.sleep(delay)).max()
.ifPresent(max -> System.out.println(Thread.currentThread() + " " + max));
}
public static boolean isPrime(long n) {
return n > 1 && rangeClosed(2, (long) sqrt(n)).noneMatch(divisor -> n % divisor == 0);
}
}