java - 是否可以在 Stream.parallel() 中设置线程的优先级?

标签 java java-8 java-stream java-threads

如果我想在后台任务中并行运行一个流,是否可以以较低的优先级运行它?如果是这样的话?

最佳答案

是的,这是可能的。

过程如下:

  1. 创建一个 ForkJoinWorkerThreadFactory 以创建具有适当优先级的线程。

  2. 使用上述线程工厂创建一个ForkJoinPool

  3. 实例化并行流。

  4. 通过将流提交到 ForkJoinPool

  5. 来运行流

像这样:

public class MyThread extends ForkJoinWorkerThread {
    public MyThread(ForkJoinPool pool, int priority) {
        super(pool);
        setPriority(priority);
    }
}

final int poolSize = ...
final int priority = ...

List<Long> aList = LongStream.rangeClosed(firstNum, lastNum).boxed()
  .collect(Collectors.toList());

ForkJoinWorkerThreadFactory factory = new ForkJoinWorkerThreadFactory() {
    public ForkJoinWorkerThread newThread(ForkJoinPool pool) {
         return new MyThread(pool, priority);
    }
};
/*
ForkJoinWorkerThreadFactory factory = pool -> new MyThread(
  pool,
  priority
);
*/

ForkJoinPool customThreadPool = new ForkJoinPool(
    poolSize, factory, null, false);
long actualTotal = customThreadPool.submit(
    () -> aList.parallelStream().reduce(0L, Long::sum)).get();

(示例代码改编http://www.baeldung.com/java-8-parallel-streams-custom-threadpool)

关于java - 是否可以在 Stream.parallel() 中设置线程的优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47492819/

相关文章:

小型/中型/大型桌面应用程序的 JavaFX 最佳实践指南?

java - 撒克逊 API : Modifying XML document

java - 如何禁用远程调试

具有 3 个参数的 Java8 stream.reduce() - 获得透明度

java - 我在哪里可以获得 Java 8 语言规范?

java - 文件系统如何实现扇区锁定?

Java 8 流收集项目列表的 map

Java 8 日期和时间时间字段

java - 如何在 map 中有效地找到最高值的最低键,并限制它可以包含重复值?

Java-8:要流式传输的 boolean 原始数组?