先看一段代码:
static class User{}
public static void test(){
final User user = new User();
Thread thread = new Thread() {
@Override
public void run() {
try {
System.out.println("Thread start execute");
Thread.sleep(Long.MAX_VALUE);
} catch (InterruptedException e) {
e.printStackTrace();
}
m1(user);
}
};
thread.start();
return;
}
public static void m1(User user){
//略....
}
public static void main(String[] args) {
test();
System.out.println("main end ...");
}
执行结果:
main end ...
Thread start execute
有同学会问 : test方法执行完并返回了,方法中开启的线程还在sleep,并没有执行到m1(user);此时恰好执行垃圾回收,user指向的对象会作为垃圾对象被回收么?
执行过程见下图:
所以答案就是不会
本文是《从 0 开始带你成为JVM实战高手》内容总结,版权问题,特此声明。想学习老师专栏的同学可以扫描二维码:
购买成功后找我返现10元