Beh*_*nil 1 java multithreading
假设我有一个如下代码
class XXX {
private Date date = new Date();
public void doSomething() {
new Thread(new Runnable() {
@Override
public void run() {
// do a long running operation and use the date variable
}
}).start();
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个XXX类的实例,我在上面调用doSomething().没有其他代码再次引用XXX实例.
我的问题是:当启动的线程正在运行时,GC是否允许从堆中删除XXX实例?是否允许GC从堆中删除日期实例?
据我所知,当匿名类使用局部变量时,其值将通过编译器创建的构造函数进行复制.但是对于像上面这样的封闭类的实例字段也是如此吗?如果是,那么xxx实例可能被垃圾收集.
请详细说明一下.
Sot*_*lis 12
表达方式
new Runnable() {
@Override
public void run() {
// do a long running operation and use the date variable
}
}
Run Code Online (Sandbox Code Playgroud)
在实例方法中,将生成一个实现的匿名内部类的实例Runnable.因为实例是内部类,所以它具有对外部实例(实例)的XXX引用.
在Thread您start()将立即开始执行Runnable#run()在一个新线程的代码.因此,Runnable不能GC.因此,Runnable实例引用的任何对象都不能被GC,即.该XXX实例.
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |