【发布时间】:2018-06-30 03:36:00
【问题描述】:
Java 的垃圾回收究竟是如何处理线程的?
为了澄清,我有一个我正在用 Java 编写的对等网络,如果一个对等点被确定为恶意行为或被路由表拒绝,我会删除对 Peer 对象的所有引用,该对象扩展了一个线程。
我是否正确假设即使我删除了对实例的所有引用,垃圾收集器也不会删除该实例的线程,因此也不会删除该实例?
【问题讨论】:
-
它不会被立即删除,但会在后续搜索取消引用的对象时被 GC 删除(不保证会在任何特定的点,即使你通过 System.gc()“强制”垃圾收集。
-
那么垃圾回收时线程会不会被中断?
-
无法收集未终止的线程并将继续工作。找到一个退出线程主循环并使用
volatile boolean stop或类似名称的地方。或者或另外,使用Thread.interrupt(不要吞下异常)。
标签: java multithreading garbage-collection