0

私のAndroidアプリケーションでは、時間の変更の影響を受けないため、タイマーの代わりにScheduledThreadPoolExecutorを使用しています。

タイマーを使用すると、名前を付けて作成できます。例:タイマーmyTimer = new Timer( "TimerA");

これは非常に便利です。スレッドビューでDDMSを使用してデバッグするときに、実行されているスレッドを正確に確認し、その名前を使用してコードまでさかのぼることができるからです。

ただし、ScheduledThreadPoolExecutorを使用すると、名前を付けることができないようです。そのため、DDMSのスレッドビューを使用してデバッグすると、「pool-4-thread-1」のようなものが表示されますが、これは意味がなく、そのような名前のコードまでさかのぼることはできません。

誰かがこれを手伝ってくれますか?

4

1 に答える 1

2

標準のJavaAPIはThreadPoolExecutorの命名をサポートしていませんが、ThreadPoolExecutorによって作成されたスレッドの命名はThreadFactoryを介してサポートされています。ここをチェックしてください

新しいスレッドの作成

新しいスレッドは、ThreadFactoryを使用して作成されます。特に指定されていない場合は、defaultThreadFactory()が使用されます。これにより、すべてが同じThreadGroupに属し、同じNORM_PRIORITY優先度と非デーモンステータスを持つスレッドが作成されます。別のThreadFactoryを指定することで、スレッドの名前、スレッドグループ、優先度、デーモンステータスなどを変更できます。newThreadからnullを返すことによって要求されたときに、ThreadFactoryがスレッドの作成に失敗した場合、エグゼキュータは続行しますが、実行できない場合があります。タスクを実行します。

サンプルコード:

ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = Executors.newScheduledThreadPool(5, new ThreadFactory() {
  final AtomicInteger threadNumber = new AtomicInteger(1);
    
  @Override
  public Thread newThread(Runnable r) {
    return new Thread(r, "Foo-" + threadNumber.getAndIncrement());
  }
});

お役に立てれば。

于 2012-07-03T22:19:27.470 に答える