Starting with the release of Tiger (Java 5) you can now get what state a thread is in by using the getState() method which returns an Enum of Thread.States. A thread can only be in one of the following states at a given point in time.
A Fresh thread that has not yet started to execute.
A thread that is executing in the Java virtual machine.
A thread that is blocked waiting for a monitor lock.
A thread that is wating to be notified by another thread.
A thread that is wating to be notified by another thread for a specific amount of time
A thread whos run method has ended.