当没有引用的新Thread()将被垃圾收集

ran*_*psp 6 java multithreading

在下面的示例中,新的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();
    }
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*n C 12

一个尚未启动的新线程将以正常方式无法访问时进行垃圾回收.

已启动的新线程将成为垃圾收集"root".它完成之前(之后)不会被垃圾收集.

在下面的示例中,新的Thread()没有任何引用.它是否有可能被垃圾收集在它下面?

不,它已经启动,因此在完成/死亡之前不会被垃圾收集.它确实有一个可达的参考,直到(至少)start()呼叫返回的点.

也没有扩展Thread类或实现runnable,我们如何创建一个线程?

在你的榜样,你已经创建的匿名子类Thread; 即一个延伸的类Thread.

  • @randeepsp,时间并不重要.第二个是计算机的大约3,000,000,000个时钟周期(即永恒).它会在一年后表现相同,一秒钟后表现相同. (2认同)