我想为工作窃取池使用的 ForkJoinPool 线程设置名称,由
ExecutorService newWorkStealingPool(int parallelism)
or
ExecutorService newWorkStealingPool()
到目前为止,我找不到一种方法来在此使用的线程上设置自定义名称ExecutorService
,有办法吗?
newWorkStealingPool()
基本上供应一个ForkJoinPool
, but ForkJoinPool
也没有提供名称模式的公共构造函数。
update:
我现在找到了这个构造函数ForkJoinPool https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ForkJoinPool.html#ForkJoinPool-int-java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory-java.lang.Thread.UncaughtExceptionHandler-boolean-这需要一个线程工厂ForkJoinPool.ForkJoinWorkerThreadFactory
。但工厂应该返回一个ForkJoinWorkerThread
,它没有公共构造函数。所以我想我必须子类化ForkJoinWorkerThread
.
这似乎是所需的最低代码,重用现有的默认工厂:
final ForkJoinWorkerThreadFactory factory = new ForkJoinWorkerThreadFactory() {
@Override
public ForkJoinWorkerThread newThread(ForkJoinPool pool) {
final ForkJoinWorkerThread worker = ForkJoinPool.defaultForkJoinWorkerThreadFactory.newThread(pool);
worker.setName("my-thread-prefix-name-" + worker.getPoolIndex());
return worker;
}
};
forkJoinPool = new ForkJoinPool(Runtime.getRuntime().availableProcessors(), factory, null, false);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)