0

对于我的 Android 应用程序,我使用 ScheduledThreadPoolExecutor 而不是 Timer,因为它不受时间变化的影响。

使用计时器,您可以通过为其命名来创建它。例如:定时器 myTimer = new Timer("TimerA");

这非常方便,因为在 Threads 视图中使用 DDMS 进行调试时,我可以看到哪些线程正在运行……并使用名称来追溯我的代码。

但是,使用 ScheduledThreadPoolExecutor,我似乎无法给它命名。因此,当在 DDMS 中使用线程视图进行调试时,我看到类似:“pool-4-thread-1”的内容,它没有意义,而且我无法用这样的名称追溯到我的代码。

谁能帮我这个?

4

1 回答 1

2

标准 Java API 不支持命名 ThreadPoolExecutor,但是,通过 ThreadFactory 支持命名由 ThreadPoolExecutor 创建的线程,请查看此处

创建新线程

使用 ThreadFactory 创建新线程。如果没有另外指定,则使用 defaultThreadFactory(),它创建的线程都在同一个 ThreadGroup 中,并且具有相同的 NORM_PRIORITY 优先级和非守护进程状态。通过提供不同的 ThreadFactory,您可以更改线程的名称、线程组、优先级、守护程序状态等。如果 ThreadFactory 在从 newThread 返回 null 时未能创建线程,则执行程序将继续,但可能无法执行任何任务。

示例代码:

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 回答