【发布时间】:2017-09-19 00:31:52
【问题描述】:
我正在编写一个程序,所以我遇到了问题。
为什么不调用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
并且没有消息“关闭消息已停止”。 请帮帮我。
怎么了?
【问题讨论】:
-
你的程序中没有任何地方
exOneobj超出范围,所以它永远不会被垃圾收集,所以finalize()永远不会运行。 -
finalize()在垃圾收集对象 (exOneobj) 以释放内存空间之前执行,但在您的程序中,当run退出时exOneobj仍在内存中,但程序结束以便@ 987654329@未被调用
标签: java multithreading finalize