1. ホーム

[解決済み】ExecutorServiceのスレッドとスレッドプールの命名について

2022-04-02 16:09:15

質問

を利用するアプリケーションがあるとします。 Executor のようなフレームワークがあります。

Executors.newSingleThreadExecutor().submit(new Runnable(){
    @Override
    public void run(){
        // do stuff
    }
}

このアプリケーションをデバッガで実行すると、次のような(デフォルトの)名前でスレッドが作成されます。 Thread[pool-1-thread-1] . 見ての通り、これはひどく便利なものではなく、私の知る限りでは Executor フレームワークは、作成されたスレッドやスレッドプールに名前を付ける簡単な方法を提供しません。

では、スレッドやスレッドプールに名前をつけるにはどうしたらいいのでしょうか?たとえば Thread[FooPool-FooThread] .

解決方法は?

を提供することができます。 ThreadFactory から newSingleThreadScheduledExecutor(ThreadFactory threadFactory) . ファクトリーはスレッドの作成に責任を持ち、スレッドに名前を付けることができるようになります。

を引用すると Javadoc :

新しいスレッドの作成

新しいスレッドを作成するには ThreadFactory . 特に指定がない場合は Executors.defaultThreadFactory() を使用すると、スレッドを作成する際にすべて同じ ThreadGroup で、同じ NORM_PRIORITY の優先順位と非デーモン状態である。異なる ThreadFactory スレッドの名前、スレッドグループ、優先度、デーモン状態などを変更することができます。もし ThreadFactory からnullを返してスレッドを作成することに失敗しました。 newThread この場合、エグゼキュータは続行しますが、タスクを実行できない可能性があります。