对于我的安卓应用程序,我使用ScheduledThreadPoolExecutor而不是Timer,因为它不受时间变化的影响。
使用计时器,您可以通过为其指定名称来创建它。例如:定时器myTimer =新定时器(“TimerA”);
这非常方便,因为当在Thread视图中使用DDMS进行调试时,我可以确切地看到哪些线程正在运行……然后用这个名字追溯到我的代码。
但是,使用ScheduledThreadPoolExecutor时,我似乎不能给它命名。因此,当在DDMS中使用thread视图进行调试时,我看到类似这样的内容:"pool-4-thread-1“,这是没有意义的,并且我无法使用这样的名称回溯到我的代码。
有人能帮我吗?
发布于 2012-07-04 06:19:27
标准Java API不支持命名ThreadPoolExecutor,但是通过ThreadFactory支持命名由ThreadPoolExecutor创建的线程,请查看here
创建新线程
使用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());
}
});希望这能有所帮助。
https://stackoverflow.com/questions/11319604
复制相似问题