JAVA语言线程的六种状态验证:NEW、RUNNABLE、TIMED_WAITING、BLOCKED、WAITING、TERMINATED
直接上代码:
public class TestThreadStateBlockedWaitingTimedWaiting implements Runnable { public TestThreadStateBlockedWaitingTimedWaiting(){} public static void main(String[] args) throws InterruptedException { TestThreadStateBlockedWaitingTimedWaiting runnable = new TestThreadStateBlockedWaitingTimedWaiting(); Thread thread1 = new Thread(runnable, "生产者"); System.out.println(thread1.getName() + "--" + thread1.getState());//NEW thread1.start(); System.out.println(thread1.getName() + "--" + thread1.getState());//RUNNABLE Thread thread2 = new Thread(runnable, "消费者"); thread2.start(); Thread.sleep(1); System.out.println(thread1.getName() + "--" + thread1.getState());//TIMED_WAITING Thread.sleep(1000); System.out.println(thread2.getName() + "--" + thread2.getState());//BLOCKED 状态 因为此时 上一个线程进入synchronized 代码块中不出来, 无法获得锁 Thread.sleep(3); System.out.println(thread1.getName() + "--" + thread1.getState());//WAITING Thread.sleep(1000); runnable.setFlag(true); Thread thread3 = new Thread(runnable, "消费者二"); thread3.start(); Thread.sleep(4); System.out.println(thread1.getName() + "--" + thread1.getState());//TERMINATED } public void setFlag(boolean flag) { this.flag = flag; } private boolean flag = false; public TestThreadStateBlockedWaitingTimedWaiting(boolean flag) { this.flag = flag; } private synchronized void syn() throws InterruptedException { //TIMED_WAITING Thread.sleep(2); if(this.flag){ notify(); } //WAITING wait(); } @Override public void run() { try { syn(); } catch (InterruptedException e) { throw new RuntimeException(e); } } }
运行结果:
生产者--NEW
生产者--RUNNABLE
生产者--TIMED_WAITING
消费者--BLOCKED
生产者--WAITING
生产者--TERMINATED