【发布时间】:2016-11-30 08:52:40
【问题描述】:
说我有课
public class OuterClass
{
public static WorkerClass worker;
}
在线程 1 中
执行以下命令
Outerclass.worker.doLongRunningOperation();
doLongRunningOperation 执行时,在线程 2 中
Outerclass.worker = new WokerClass();
线程 1 中的 doLongRunningOperation 会发生什么?
线程 1 引用的 worker 对象是否会被垃圾回收,只有在 doLongRunningOperation 完成后才能被突然终止以垃圾回收 worker 对象。
编辑:
我认为它应该被 GC'ed,因为它不再被引用。但是doLongRunningOperation 会发生什么?会突然终止吗?
【问题讨论】:
-
您能否说明您认为会发生什么以及为什么?应该对它进行 GC 处理的一些原因是什么,不应该是哪些原因?
-
@SotiriosDelimanolis 我已经在编辑中澄清了。
-
你提到在
doLongRunningOperation完成之后所以我对你的新问题感到困惑它会被突然终止吗?看看这个概念GC 根。 -
@SotiriosDelimanolis 对不起,我的错,我已经澄清了那部分。英语不是我的母语。
-
如果(并且同时)一个线程正在调用一个实例方法,它显然需要对该实例的引用。如果存在对实例的可访问引用,则无法对该实例进行垃圾回收。
标签: java multithreading concurrency