Java Executor
フレームワークを使用するアプリケーションがあり、次のようなコードがありますprotected ScheduledExecutorService scheduledExecutorService = new ScheduledThreadPoolExecutor(5)
私の理解では、JVMは内部的に5つのスレッドのプールを作成します。プロファイラーで実行を確認すると、thread-pool2,thread-pool3
等々。
Some of these thread pools are created by the server and some are created by me
、自分が作成したものとサーバーが作成したものを区別する方法が必要です。
スレッドプールに名前を付けることができればトリックは実行できると思いますが、同じことを可能にするAPIが表示されません。
前もって感謝します。
独自の ThreadFactory を ScheduledThreadPoolExecutor に渡すことができます。 ThreadFactoryはスレッドを作成し、任意の名前を付けることができます。 ThreadFactoryは Executors.defaultThreadFactory() を再利用することもでき、名前を変更してからスレッドを返します。
public class NamedThreadPoolExecutor extends ThreadPoolExecutor {
private static final String THREAD_NAME_PATTERN = "%s-%d";
public NamedThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, final TimeUnit unit,
final String namePrefix) {
super(corePoolSize, maximumPoolSize, keepAliveTime, unit, new LinkedBlockingQueue<>(),
new ThreadFactory() {
private final AtomicInteger counter = new AtomicInteger();
@Override
public Thread newThread(Runnable r) {
final String threadName = String.format(THREAD_NAME_PATTERN, namePrefix, counter.incrementAndGet());
return new Thread(r, threadName);
}
});
}
}
ThreadPoolExecutorから documentation :
新しいスレッドの作成新しいスレッドは、ThreadFactoryを使用して作成されます。特に指定されていない場合は、Executors.defaultThreadFactory()が使用され、すべてが同じThreadGroupにあり、同じNORM_PRIORITY優先度と非デーモンステータスを持つスレッドが作成されます。別のThreadFactoryを指定することで、スレッドの名前、スレッドグループ、優先度、デーモンのステータスなどを変更できます。 newThreadからnullを返すよう要求された場合、executorは続行しますが、タスクを実行できない可能性があります。
独自のカスタムスレッドファクトリを使用します。 ThreadFactoryBuilderを実装して、以下を実行できるカスタムスレッドファクトリを作成します。
次の投稿には、使用可能なサンプルThreadFactoryBuilder実装があります。
http://wilddiary.com/understanding-Java-threadfactory-creating-custom-thread-factories/