Thread.isAlive() は TERMINATED で 「生存していない」

Thread.isAlive() は 実際にThread が GC されてからでないと
Falseにならないと思ってました。

でも、次の処理がない場合は 「生存していない」扱いになることを発見。
知らなかった。。。

以下検証コードです。

public class Test{

    public static void main(String[] args) {
        new TestChiledThread(Thread.currentThread()).start();
        try {
            Thread.sleep(1000);
        } catch (InterruptedException ex) {
            Logger.getLogger(TestChiledThread.class.getName()).log(Level.SEVERE, null, ex);
        }
        System.out.println("main end.");
        System.gc();
    }
    
    @Override
    protected void finalize() throws Throwable {
        System.out.println("finalize!");
        super.finalize();
    }
}

class TestChiledThread extends Thread{
    private Thread current = null;
    public TestChiledThread(Thread current){
        this.current = current;
    }
    @Override
    public void run(){
        for(int i = 0 ; i < 5 ; i++){
            try {
                System.out.println( "status:" + current.getState() + " isAlive:" + current.isAlive() + " instance-null?:" + (current == null));
                Thread.sleep(1000);
            } catch (InterruptedException ex) {
                Logger.getLogger(TestChiledThread.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
}

結果こうなりました

run:
status:TIMED_WAITING isAlive:true instance-null?:false
main end.
status:RUNNABLE isAlive:true instance-null?:false
status:TERMINATED isAlive:false instance-null?:false
status:TERMINATED isAlive:false instance-null?:false
status:TERMINATED isAlive:false instance-null?:false
ビルド成功(合計時間: 5秒)