为什么在范围之后线程对象不被销毁?

 可乐16311 发布于 2023-01-30 16:59

我认为对象只存在于已定义的范围内.但是在这个程序中,执行thtest方法后,t1线程的对象仍然存在,我可以在输出中看到"hi"和"bye".

public class apples {
    public static void main(String args[]){
        int b =1;
        navid n = new navid();
        n.thtest(); 
        while (b==1){ System.out.println("bye"); }  
    }
}

public class navid {
    int a=1;
    public void thtest (){
        Runnable te = new Runnable() {
            public void run(){
                try{
                    while (a==1){ System.out.println("hi");}
                }catch(Exception e){}
            }   
        };
        Thread t1 = new Thread (te);
        t1.start();
    }
}

nos.. 6

我认为对象只存在于已定义的范围内.

这是一个错误的假设.对象存在,直到不再有对它们的引用(或者直到它被垃圾收集,具体取决于您的视图).您可以将对对象的引用存储在除定义之外的其他位置,并根据需要使它们生效.

线程有点特殊,JVM将跟踪一个线程,它将继续运行,直到它的run()方法结束,即使你的代码不包含对Thread对象的引用.

1 个回答
  • 我认为对象只存在于已定义的范围内.

    这是一个错误的假设.对象存在,直到不再有对它们的引用(或者直到它被垃圾收集,具体取决于您的视图).您可以将对对象的引用存储在除定义之外的其他位置,并根据需要使它们生效.

    线程有点特殊,JVM将跟踪一个线程,它将继续运行,直到它的run()方法结束,即使你的代码不包含对Thread对象的引用.

    2023-01-30 17:00 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有