3

スレッドプールからスレッドを作成し、タスクIDRunnable (オブジェクトに保持されている一意のID)をスレッド名として渡す必要があります。

インターフェイスを調べましたが、ThreadFactory作成されたスレッドにスレッド名として追加のパラメーターを渡すことができませんでした。また、DefaultThreadFactoryクラスを見ました。を使用しAtomicIntegerてスレッド名を設定します。

任意の文字列をファクトリに渡して、作成されたスレッドの名前としてその文字列を使用させることはできますか?

4

2 に答える 2

7

タスクを実行するスレッドの名前を次のように設定できます。

class YourTask implements Runnable {
  public void run() {
    Thread.currentThread().setName(getTaskId());
    //.. rest of the code for the task
  }
}

これはおそらくあなたがとにかく欲しいものです。スレッドプールによって作成されたスレッドは、さまざまなタスクを実行するために使用される可能性があります。そのため、スレッドに、最終的に実行されるタスクに依存する名前を付けることはできません。

于 2012-08-15T05:54:04.363 に答える
0

スレッドプールでスケジュールされた各スレッドにtaskIdを手動で設定することは、それを行うための最も洗練された方法ではないと思います。このようにThreadFactoryインターフェースを実装できます-

public class NamedThreadFactory implements ThreadFactory{
    @Override
    public Thread newThread(Runnable r) {
        Thread t = new Thread(r);
        if (r instanceof NamedRunnable) {
            NamedRunnable namedRunnable = (NamedRunnable)r;
            t.setName(namedRunnable.getTaskName());
        }
        return t;
    }
}

そして、あなたのNamedRunnableは次のようになります-

public interface NamedRunnable extends Runnable{
    String getTaskName();
}
于 2015-09-15T06:11:35.250 に答える