在java中使用枚举类型Thread.State可以表示出一个线程对象当前的状态,调用线程对象的getState()方法可以获得线程的当前状态
    java.lang.Thread.State枚举类型

public class Thread implements Runnable{
         public enum State {
             NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING,TERMINATED;
         }
     }


    
    1)Thread.State枚举类型每个对象表示的状态含义
        NEW(新建尚未运行/启动)
            A thread that has not yet started is in this state.

            一般是还没调用start方法,或者刚刚调用了start方法,start方法不一定"立即"改变线程状态,中间可能需要一些步骤才完成一个线程的启动。

        RUNNABLE(可运行状态: 包括正在运行或准备运行)
            A thread executing in the Java virtual machine is in this state.

            start方法调用结束,线程由NEW变成RUNNABLE.
            线程存活着,并尝试抢占CPU资源,或者已经抢占到CPU资源正在运行的状态都显示为RUNNABLE

        BLOCKED(等待获取锁时进入的状态)
            A thread that is blocked waiting for a monitor lock is in this state.

            线程A和线程B都要执行方法test,而且方法test被加了锁,线程A先拿到了锁被运行执行test方法,线程B这时候需要等待线程A把锁释放。这时候线程B就是处理BLOCKED
            
        WAITING(通过wait方法进入"无限期"的等待)
            A thread that is waiting indefinitely for another thread to perform a particular action is in this state.

            线程A和线程B都要执行方法test,而且方法test被加了锁,线程A先拿到了锁被运行执行test方法,线程B这时候需要等待线程A把锁释放(线程B处于BLOCKED状态),如果这时候线程A调用了wait方法,那么线程A就会马上交出CPU的使用权以及刚才拿到的锁,从而进入到WAITING状态,而线程B发现锁已经被释放了,线程B就从BLOCKED状态进入到了RUNNABLE,如果线程B拿到了锁之后在运行期间,调用了notify或者notifyAll方法,这时候线程A就会从WAITING状态进入到BLOCKED状态,从而等待锁的是释放.

        TIMED_WAITING(通过sleep或wait等方法进入的"有限期"等待的状态)
            A thread that is waiting for another thread to perform an action for up to a specified waiting time is in this state.
            
            线程对象的sleep或wait等方法都可以传一个时间参数,表示就算没有其他线程调用特定方法来改变自己状态的时候,也可以通过这个时间参数让自己自动改变状态(因为时间到了)。

        TERMINATED(线程终止状态)
            A thread that has exited is in this state.

            线程结束了,就处于这种状态,也就是run方法运行结束了。
    
    
    2)通常对线程对象状态的描述
        为了便于理解和记忆,通过会对Thread.State中定义的状态进行整理归类,最终可得到书中所描述的线程状态图。
        图中将线程状态分为:
            初始化状态
            就绪状态
            运行状态
            死亡状态
            阻塞状态(阻塞在等待池、阻塞在锁池、其他情况阻塞)
        
        这样可以让我们对线程状态有一个更好的理解和掌握。