JVM实战总结:一个多线程中对象引用的问题

先看一段代码:

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指向的对象会作为垃圾对象被回收么?

      执行过程见下图:

JVM实战总结:一个多线程中对象引用的问题_第1张图片

 

所以答案就是不会

本文是《从 0 开始带你成为JVM实战高手》内容总结,版权问题,特此声明。想学习老师专栏的同学可以扫描二维码:

 

 

 

 

购买成功后找我返现10元

你可能感兴趣的:(JVM实战总结:一个多线程中对象引用的问题)