多线程并发编程系列教程

2 State of Thread(线程状态)

2019-11-02  本文已影响0人  Vander1991

2.1 线程状态简介

在java.lang.Thread.State中能清楚的看到Java中定义了6种状态:

public enum State {
    /**
     * Thread state for a thread which has not yet started.
     */
    NEW,

    /**
     * Thread state for a runnable thread.  A thread in the runnable
     * state is executing in the Java virtual machine but it may
     * be waiting for other resources from the operating system
     * such as processor.
     */
    RUNNABLE,
  1. New:尚未启动的线程的线程状态
  2. Runnable:可运行的线程状态,等待CPU调度
  3. BLOCKED:线程阻塞等待获取监视器锁的线程状态(处于synchronized同步代码块或方法中被阻塞)
  4. WAITING:等待线程的线程状态(不带超时的方式:Object.wait、Thread.join、LockSupport.park)
  5. TIMED_WAITING:具有指定等待时间的等待线程的线程状态。(带超时方式:Thread.sleep、Object.wait、Thread.join、LockSupport.parkNanos、LockSupport.parkUntil)
  6. TERMINATED:终止线程的线程状态。线程正常完成执行或出现异常(接收到中断指令)

2.2 线程状态间的切换

线程间的状态切换

2.2.1 新建-运行-终止(示例)


运行结果

2.2.2 新建->运行->等待->运行->终止(示例)


运行结果

2.2.3 新建->运行->阻塞->运行->终止(示例)


运行结果

这里主线程等待200ms的时候,主线程拿到ThreadStateSwitch的对象锁是没有被释放的,在blockThreadState的方法中的同步块运行完之后,thread3才能拿到对象锁。

上一篇 下一篇

猜你喜欢

热点阅读