1,Thread 概念以及Thread 的6个状态

Thread 有6个状态 , NEW, RUNNABLE , BLOCKED, WATTING, TIMED WAITING, TERMINATED

1.NEW
至今尚未启动的线程的状态。
2.RUNNABLE
可运行线程的线程状态。处于可运行状态的某一线程正在 Java 虚拟机中运行,但它可能正在等待操作系统中的其他资源,比如处理器。
3.BLOCKED
受阻塞并且正在等待监视器锁的某一线程的线程状态。处于受阻塞状态的某一线程正在等待监视器锁,以便进入一个同步的块/方法,或者在调用 Object.wait 之后再次进入同步的块/方法。
4.WAITING
某一等待线程的线程状态。某一线程因为调用下列方法之一而处于等待状态
不带超时值的 Object.wait
不带超时值的 Thread.join
LockSupport.park
5.TIMED_WAITING
具有指定等待时间的某一等待线程的线程状态。某一线程因为调用以下带有指定正等待时间的方法之一而处于定时等待状态:
Thread.sleep
带有超时值的 Object.wait
带有超时值的 Thread.join
LockSupport.parkNanos
LockSupport.parkUntil
6.TERMINATED
已终止线程的线程状态。线程已经结束执行。

测试代码如下

package com.zyguo.thread;

public class SleepRunnable implements Runnable{
    private int sleepTime;
    public SleepRunnable( int sleepTime ){
        this.sleepTime = sleepTime;
    }
    @Override
    public void run() {
        try {
            System.out.println( Thread.currentThread() + " begin sleep " + this.sleepTime );
            Thread.sleep( sleepTime );
            System.out.println( Thread.currentThread() + " end sleep " + this.sleepTime );
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
package com.zyguo.thread;

import java.lang.Thread.State;

public class ThreadStatus {
    public static void main(String[] args) {
        final Thread t1 = new Thread( new SleepRunnable( 5000 ) ); 
        final Thread t2 = new Thread( new SleepRunnable( 10000 ) );
        System.out.println("new t1 status=" + t1.getState() );
        System.out.println("new t2 status=" + t2.getState() );
        
        Thread monitor = new Thread( new Runnable() {
            public void run() {
                //只要 t1 和  t2 有一个没停,就不停止监控
                while ( ! ( t1.getState() == State.TERMINATED && t2.getState() == State.TERMINATED ) ) {
                    System.out.println("t1 status:" + t1.getState() + ",t=" + System.currentTimeMillis() );
                    System.out.println("t2 status:" + t2.getState() + ",t=" + System.currentTimeMillis() );
                    try {
                        Thread.sleep( 1000 );
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                
                System.out.println("t1 status:" + t1.getState() + ",t=" + System.currentTimeMillis() );
                System.out.println("t2 status:" + t2.getState() + ",t=" + System.currentTimeMillis() );
                
            }
        } );
        
        monitor.start();
        t1.start();
        t2.start();
        
    } 
}

结果如下

new t1 status=NEW
new t2 status=NEW
t1 status:RUNNABLE,t=1426735950026
Thread[Thread-0,5,main] begin sleep 5000
t2 status:RUNNABLE,t=1426735950026
Thread[Thread-1,5,main] begin sleep 10000
t1 status:TIMED_WAITING,t=1426735951040
t2 status:TIMED_WAITING,t=1426735951040
t1 status:TIMED_WAITING,t=1426735952055
t2 status:TIMED_WAITING,t=1426735952055
t1 status:TIMED_WAITING,t=1426735953070
t2 status:TIMED_WAITING,t=1426735953070
t1 status:TIMED_WAITING,t=1426735954085
t2 status:TIMED_WAITING,t=1426735954085
Thread[Thread-0,5,main] end sleep 5000
t1 status:TERMINATED,t=1426735955100
t2 status:TIMED_WAITING,t=1426735955100
t1 status:TERMINATED,t=1426735956115
t2 status:TIMED_WAITING,t=1426735956115
t1 status:TERMINATED,t=1426735957130
t2 status:TIMED_WAITING,t=1426735957130
t1 status:TERMINATED,t=1426735958145
t2 status:TIMED_WAITING,t=1426735958145
t1 status:TERMINATED,t=1426735959160
t2 status:TIMED_WAITING,t=1426735959160
Thread[Thread-1,5,main] end sleep 10000
t1 status:TERMINATED,t=1426735960175
t2 status:TERMINATED,t=1426735960175

 

原文地址:https://www.cnblogs.com/zyguo/p/4346365.html