java - 没有引用的 new Thread() 什么时候会被垃圾回收

标签 java multithreading

在下面的例子中,new Thread() 没有任何引用。它是否有可能在它死了下面被垃圾收集? 同样,在不扩展 Thread 类或实现 runnable 的情况下,我们如何创建线程?

public class TestFive {
    private int x;
    public void foo() {
            int current = x;
            x = current + 1;
    }
    public void go() {
            for(int i = 0; i < 5; i++) {
                    new Thread() {
                            public void run() {
                                    foo();
                                    System.out.print(x + ", ");
                            } 
                    }.start();
            } 
    }
    public static void main(String args[]){
            TestFive bb = new TestFive();
            bb.go();
    }
}

最佳答案

未启动的新线程在正常情况下无法访问时将被垃圾回收。

已启动的新线程成为垃圾收集“根”。在它完成之前(之后)它不会被垃圾收集。

In the below example, new Thread() doesnt have any reference. Is it possible that it be garbage collected below it is dead ?

没有。它已经启动,因此在它完成/死亡之前不会被垃圾收集。在(至少)start() 调用返回之前,它确实有一个可达的引用。

Also without extending Thread class or implementing runnable, how are we creating a thread?

在您的示例中,您已经创建了Thread 的匿名子类;即扩展 Thread 的类。

关于java - 没有引用的 new Thread() 什么时候会被垃圾回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6409262/

相关文章:

java - 如何正确关闭数据源连接?

java - 我想自动同时滑动 3 View 寻呼机

Java Stream API如何改进表达

c++ - C++ 11 触发异步任务并忘记它的方法是什么?

java - 使用 PipedOutputStream 和 PipedInputStream 的多线程写入器和单线程读取器

java - 有没有一种简单的方法可以在 Windows 中使用 Java 来确定文件是否是硬链接(hard link)?

java - 我可以为任何方法抛出 FileNotFoundException,还是仅针对 main 方法?

使用 winsock 和 std::thread 的 C++ 多线程服务器

java - 如何向数据库中插入百万条数据

multithreading - 什么是不可变对象(immutable对象)?