1

singleThreadedExecutorJava などでさまざまなタイプの Thread Executor を作成することができますfixedThreadedExecutor。何かを追加して、実行中のスレッドを呼び出したときに、それがどのgetThreadName()Thread getThreadID()Executor から来たかを確認できるようにする方法はありますか?

ありがとう。

4

3 に答える 3

1

はい。これらのファクトリ メソッドにThreadFactory実装を提供します。Threadこれはからを作るものですRunnable。そのため、メソッドの名前、優先度、またはデーモンのステータスを設定するなど、メソッドで好きなことを行うことができます。カスタムThreadサブクラスを使用することもできます。

于 2012-10-24T20:25:02.647 に答える
1

を使用している場合は、非常に簡単です。

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;
    }
};

以下も参照してください。

于 2012-10-24T20:25:05.520 に答える
1

送信されたタスクが実行されているときにスレッドの名前を取得している場合は、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();
于 2012-10-24T20:25:27.030 に答える