使用已停止的循环器清理线程

时间:2014-01-30 02:59:24

标签: java android concurrency garbage-collection

我正在使用附加到Android HandlerThread的Looper来执行长时间运行的异步任务:

HandlerThread handlerThread = new HandlerThread("handler-thread");
handlerThread.start()
Handler myHandler = new Handler(callbacks, handlerThread.getLooper());
// Ready to handle messages in callbacks

当我完成工作线程时,我调用handlerThread.getLooper().quit()来停止它的Looper。 HandlerThread实例在其Looper退出()之后终止(退出,死掉),假设该线程没有执行其他执行吗?

2 个答案:

答案 0 :(得分:2)

  

HandlerThread实例在其Looper退出()之后终止(退出,死掉),假设该线程没有执行其他执行吗?

在Looper退出之后,如果在run()中没有执行其他处理,则工作线程的run()方法返回。此时,handlerThread.isAlive()返回false,handlerThread.getState()返回TERMINATED

请注意,如Thread API doc所述,多次启动一个帖子是不合法的。

答案 1 :(得分:0)

  

在另一个答案中提到,Java中的线程永远不会被垃圾收集。

不,它没有。你的链接没有提到任何这样的事情。

当一个线程无法访问时,它就像任何其他对象一样有资格进行垃圾收集。如果线程在退出之前无法发生。 就是你的链接所说的。

你的问题是基于一种误解。