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