Thread.getState() と Thread.isAlive() の関係

試したJVMはWindows版の SunJDK 6u14。

結論
Thread.getState() Therad.isAlive()
NEW false
RUNNABLE true
BLOCKED true
TIMED_WAITING true
TERMINATE false
検証コード
public class ThreadState {
    public static void main(String[] args) {
        final Object lock = new Object();

        Thread forLoopThread = new Thread(new Runnable() {
            public void run() {
                for (int i=0; i<1000000; i++) {
                    lock.toString(); // 適当な処理
                }
            }
        }, "ForLoopThread");

        Thread sleepThread = new Thread(new Runnable() {
            public void run() {
                sleep(1000);
            }
        }, "SleepThread");

        Thread waitThread = new Thread(new Runnable() {
            public void run() {
                synchronized (lock) {
                    try { lock.wait(1000); }
                    catch (Exception e) { e.printStackTrace(); }
                }
            }
        }, "WaitThread");

        printState(forLoopThread);
        forLoopThread.start();
        printState(forLoopThread);
        sleep(1000);
        printState(forLoopThread);

        printState(sleepThread);
        sleepThread.start();
        sleep(100);
        printState(sleepThread);
        sleep(1000);
        printState(sleepThread);

        synchronized (lock) {
            waitThread.start();
            sleep(100);
            printState(waitThread);
        }
        sleep(100);
        printState(waitThread);
        sleep(1000);
        printState(waitThread);
    }

    private static void sleep(long msec) {
        try {
            Thread.sleep(msec);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void printState(Thread t) {
        System.out.println(t.getName() + " state:" + t.getState() + " alive:" + t.isAlive());
    }
}
結果
$ java ThreadState
ForLoopThread state:NEW alive:false
ForLoopThread state:RUNNABLE alive:true
ForLoopThread state:TERMINATED alive:false
SleepThread state:NEW alive:false
SleepThread state:TIMED_WAITING alive:true
SleepThread state:TERMINATED alive:false
WaitThread state:BLOCKED alive:true
WaitThread state:TIMED_WAITING alive:true
WaitThread state:TERMINATED alive:false