图文并茂学"并发编程" - 线程的几种状态及其切换

线程的几种状态

  • 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。
  • 运行(RUNNABLE):处于可运行状态的线程正在JVM中执行,但它可能正在等待来自操作系统的其他资源,例如处理器。
  • 阻塞(BLOCKED):线程阻塞于synchronized锁,等待获取synchronized锁的状态。
  • 等待(WAITING):Object.wait()、join()、 LockSupport.park(),进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)。
  • 超时等待(TIMED_WAITING):Object.wait(long)、Thread.join()、LockSupport.parkNanos()、LockSupport.parkUntil,该状态不同于WAITING,它可以在指定的时间内自行返回。
  • 终止(TERMINATED):表示该线程已经执行完毕。

线程几种状态代码演示

RUNNABLE状态

public class ThreadStateDemo {

    public static void main(String[] args) {

        //TODO 演示线程处于RUNNABLE状态
        new Thread(()->{
            try {
                //让线程保持RUNNABLE状态,等待键盘输入
                System.in.read();
            } catch (IOException e) {
                e.printStackTrace();
            }
        },"Thread-1").start();
    }
}

cmd窗口输入jconsole,打开 Java监视和管理控制台,查看ThreadStateDemo类中,Thread-1线程状态

图文并茂学

BLOCK状态和TIMED_WAITING状态

public class ThreadStateDemo {

    public static void main(String[] args) throws InterruptedException {
        Object obj = new Object();

        //TODO 演示线程处于TIMED_WAITING状态
        new Thread(()->{
            synchronized (obj){
                try {
                    Thread.sleep(1000000000L);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        },"Thread-1").start();

        //让主线程休眠2毫秒,保证Thread-1先执行先占有锁obj
        Thread.sleep(2L);

        //TODO 演示线程处于BLOCK状态
        new Thread(()->{
            synchronized (obj){

            }
        },"Thread-2").start();

    }
}

使用jconsole查看控制窗口

图文并茂学

Thread-1 等待 Thread.sleep(1000000000L) 执行结束,处于超时等待状态

图文并茂学

Thread-2 等待 Thread-1 释放锁,处于阻塞状态

线程状态之间的转换

图文并茂学

列举简单的几种状态转换:

状态1:创建 --》执行 --》终止

线程从创建到执行最后结束,是所有线程都会经历的

状态2:创建 --》执行 --》阻塞 --》执行 --》终止

线程从创建到执行,如果线程内部获取不到synchronized锁,线程就会处于阻塞状态,获取锁后线程回到执行状态,直到执行结束

状态3:创建 --》执行 --》超时等待 --》执行 --》终止

线程从执行到创建,如果线程内部发生类似于 Thread.sleep(1000000000L) 这样的操作,线程就会进入超时等待状态,直到sleep执行结束,线程回到执行状态,最后线程执行结束

你可能感兴趣的:(并发编程,线程,线程状态,Java)