singleThreadedExecutor
Java などでさまざまなタイプの Thread Executor を作成することができますfixedThreadedExecutor
。何かを追加して、実行中のスレッドを呼び出したときに、それがどのgetThreadName()
Thread getThreadID()
Executor から来たかを確認できるようにする方法はありますか?
ありがとう。
singleThreadedExecutor
Java などでさまざまなタイプの Thread Executor を作成することができますfixedThreadedExecutor
。何かを追加して、実行中のスレッドを呼び出したときに、それがどのgetThreadName()
Thread getThreadID()
Executor から来たかを確認できるようにする方法はありますか?
ありがとう。
はい。これらのファクトリ メソッドにThreadFactory
実装を提供します。Thread
これはからを作るものですRunnable
。そのため、メソッドの名前、優先度、またはデーモンのステータスを設定するなど、メソッドで好きなことを行うことができます。カスタムThread
サブクラスを使用することもできます。
guavaを使用している場合は、非常に簡単です。
final ThreadFactory threadFactory = new ThreadFactoryBuilder()
.setNameFormat("Fancy-pool-%02d")
.build();
Executors.newFixedThreadPool(10, threadFactory);
あなたが幸せなグアバユーザーでない場合は、自分で実装できます:
final ThreadFactory threadFactory = new ThreadFactory() {
final AtomicInteger id = new AtomicInteger();
@Override
public Thread newThread(Runnable r) {
final Thread thread = new Thread(r);
thread.setName("Fancy-pool-" + id.incrementAndGet());
return thread;
}
};
送信されたタスクが実行されているときにスレッドの名前を取得している場合は、ThreadGroup
. を使用することもできますが、ThreadLocal
それはハックのように聞こえます。
を使用するには、独自のものをエグゼキューThreadGroup
ターに注入する必要があります。ThreadFactory
final ThreadGroup threadGroup = new ThreadGroup("someThreadPoolName");
threadPool = Executors.newFixedThreadPool(10, new ThreadFactory() {
public Thread newThread(Runnable r) {
Thread thread = new Thread(threadGroup, r);
return thread;
}
});
次に、スレッドは次のことができます。
String myThreadPollName = Thread.currentThread().getThreadGroup().getName();