未调用Java-finalize()
我在写一个程序,所以我有问题 为什么不调用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
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