源代碼:
package basic;
public class finalizeTest {
private String name;
public void finalize(){
System.out.println("finalize called: " + this.name);
System.out.println("Thread id in finalize: " + Thread.currentThread().getId());
}
public finalizeTest(String name){
this.name = name;
}
public static void main(String[] args) {
System.out.println("Main Thread id: " + Thread.currentThread().getId());
finalizeTest test = new finalizeTest("Jerry");
test.hashCode();
/* 這個新創建出來的對象實例沒有任何變量指向它,因此System.gc()調用之後就會被回收
* 而且能發現Scala實例執行finalize方法的線程並不是主線程,打印出的線程ID不一樣
* */
new finalizeTest("Scala");
System.gc();
}
}
打印輸出:
Main Thread id: 1
finalize called: Scala
Thread id in finalize: 3