Java - finalize()没有被调用

时间:2017-04-21 21:28:40

标签: 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 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();
    }
}

所以输入是:

Start-up message is: start
Message 0
Message 1
Message 2

Process finished with exit code 0

没有消息&#34;关机消息已停止&#34;。 请帮帮我。

有什么问题?

1 个答案:

答案 0 :(得分:0)

当垃圾收集器清除对象时执行

finalize(),并且在你的情况下它永远不会发生,因为程序在exOneobj有机会被清除之前结束。