Ste*_*ier 11 java java-8 java-stream java-threads
如果我想在后台任务中并行运行Stream,是否可以以较低优先级运行它?如果是这样怎么样?
对的,这是可能的.
程序如下:
创建一个ForkJoinWorkerThreadFactory创建具有适当优先级的线程.
ForkJoinPool使用上面的线程工厂创建一个.
实例化并行流.
通过将流提交到.来运行流 ForkJoinPool
像这样的东西:
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();
Run Code Online (Sandbox Code Playgroud)
(示例代码改编自http://www.baeldung.com/java-8-parallel-streams-custom-threadpool)
| 归档时间: |
|
| 查看次数: |
642 次 |
| 最近记录: |