未调用Java-finalize()

未调用Java-finalize(),java,multithreading,finalize,Java,Multithreading,Finalize,我在写一个程序,所以我有问题 为什么不调用finalize()方法 public class ExOne extends Thread { private String sD; ExOne(String startUp, String shutDown){ System.out.println("Start-up message is: " + startUp); sD = shutDown; } public void final

我在写一个程序,所以我有问题

为什么不调用finalize()方法

public class ExOne extends Thread {
    private String sD;
    ExOne(String startUp, String shutDown){
        System.out.println("Start-up message is: " + startUp);
        sD = shutDown;
    }
    public void finalize() {
        System.out.println("Shut-down message is: " + sD);
    }
    @Override
    public void run() {
        try {
            for (int i = 0; i < 3; i++) {
                System.out.println("Message " + String.valueOf(i));
                Thread.sleep(1000);
            }
        }
        catch (InterruptedException e){
            System.out.println(e);
        }
        System.gc();
        System.runFinalization();
    }
}

public class Main {
    public static void main(String[] args) {
        ExOne exOneobj = new ExOne("start", "stop");
        exOneobj.start();
    }
}
并且没有消息“关机消息是停止”。 请帮帮我


有什么问题吗?

finalize()
是在垃圾收集器清除对象时执行的,在您的情况下,它从来不会发生,因为程序在
exOneobj
有机会被清除之前就结束了。

您的程序中没有
exOneobj
超出范围,所以它永远不会被垃圾收集,所以
finalize()
从不运行。
finalize()
在垃圾收集对象(
exOneobj
)之前执行,以释放内存空间,但当
run
退出时,程序仍在内存中,但程序结束,因此不会调用
finalize()
Start-up message is: start
Message 0
Message 1
Message 2

Process finished with exit code 0