java - 为什么线程对象在作用域后没有被销毁?

标签 java multithreading scope

我认为对象只存在于它们被定义的范围内。但是在这个程序中,执行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();
    }
}

最佳答案

I thought that objects only exist in the scope that they've been defined.

这是一个错误的假设。对象存在直到不再有对它们的引用(或者直到它被垃圾收集,这取决于您的观点)。您可以将对对象的引用存储在定义对象之外的其他位置,并让它们在您需要时一直存在。

线程有些特殊,JVM 会跟踪一个线程并且它会继续运行直到它的 run() 方法结束,即使您的代码不包含对 Thread 对象的引用也是如此。

关于java - 为什么线程对象在作用域后没有被销毁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21426888/

相关文章:

java - 在 Visual Studio 2015 上运行 xamarin 时出现问题 "Could not locate Java 6 or 7 SDK"

java - 不再能够在 android studio 中查看设计选项卡

Java线程更新jProgressBar在再次调用线程时不会更新

java - Retrofit 2 的自定义 CallAdapter 和 Android 上的线程问题

Javascript 函数作用域问题

perl - 如何在perl中在同一范围内重新声明变量?

java - AnnotationConfigApplicationContext.getBean返回一个不同的bean,Spring

使用 Swing 和 RXTX 进行 Java RS232 通信

java - Hazelcast 防止 JVM 终止

java - 我可以在 Spring 中对 Akka Supervisor Actor 使用单例作用域吗?