Java中线程的状态

  • 操作系统中线程的状态
  • Java中线程的状态
  • 线程状态枚举类

操作系统中线程的状态

从操作系统层面来看,线程通常有以下五种状态,前三种是线程的基本状态。

【运行态】:进程正处在处理机上运行,在单处理机环境下,上最多有一个线程处于运行态。
【就绪态】:进程获得了除处理机(CPU)之外的一切资源,一旦得到处理机(CPU),便可立即运行。系统中处于就绪态的进程可能有多个,通常将它排除一个队列,称为就绪队列。
【阻塞态】:又称 等待态。进程正在等待某一时间而暂停运行。
【创建态】:进程正在被创建,未转到就绪态。
【结束态】:进程正在从系统中消失,可能是正常退出或因其它原因中断退出。

状态转换如下图:

Java中线程的状态

Java中线程一共有6种状态:新建(New),运行(Runnable),无限等待(Watting)限期等待(TImed Waitting),阻塞(Blocked)终止(Terminated)

新建(New):创建后尚未启动的线程处于这种状态。
运行(Runnable):包括操作系统状态种的Running 和 Ready,也就是处于此状态的线程有可能正在执行,也有可能在等待着操作系统未它分配执行时间。
无限等待(Watting):处于这种状态的线程不会被分配处理器执行时间,它们要等待待其它线程显示唤醒。以下方法会让线程陷入无限期的等待状态:

  • 没有设置 Timeout 参数的 Object::wait() 方法
  • 没有设置 Timeout 参数的 Thread::join() 方法
  • LockSupport::park() 方法

限期等待(TImed Waitting):处于这种状态的线程也不会被分配处理器执行时间,不过无需等待其它线程显示唤醒,在一定时间之后它们会由系统自动唤醒。以下方法会让线程进入限期等待:

  • Thread::sleep()方法
  • 设置了 Timeout 参数的 Object::wait() 方法
  • 设置了 Timeout 参数的 Thread:join() 方法
  • LockSupport::parkNanos() 方法
  • LockSupport::parkUntil() 方法

阻塞(Blocked):线程被阻塞了,“阻塞状态” 与 “等待状态” 的区别是 “阻塞状态” 在等待着一个排它锁,这个事件将在另一个线程放弃这个锁的时候发生;而 “等待状态” 则是在等待一段时间,或者唤醒动作的发现。在程序进入同步区域的时候,线程将进入这种状态;
终止(Terminated):已终止线程的线程状态,线程已经结束执行。

这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,(运行)
/**
* Thread state for a thread blocked waiting for a monitor lock.
* A thread in the blocked state is waiting for a monitor lock
* to enter a synchronized block/method or
* reenter a synchronized block/method after calling
* {@link Object#wait() Object.wait}.
*/
BLOCKED,(阻塞)
/**
* Thread state for a waiting thread.
* A thread is in the waiting state due to calling one of the
* following methods:
* <ul>
* <li>{@link Object#wait() Object.wait} with no timeout</li>
* <li>{@link #join() Thread.join} with no timeout</li>
* <li>{@link LockSupport#park() LockSupport.park}</li>
* </ul>
*
* <p>A thread in the waiting state is waiting for another thread to
* perform a particular action.
*
* For example, a thread that has called <tt>Object.wait()</tt>
* on an object is waiting for another thread to call
* <tt>Object.notify()</tt> or <tt>Object.notifyAll()</tt> on
* that object. A thread that has called <tt>Thread.join()</tt>
* is waiting for a specified thread to terminate.
*/
WAITING,(等待)
/**
* Thread state for a waiting thread with a specified waiting time.
* A thread is in the timed waiting state due to calling one of
* the following methods with a specified positive waiting time:
* <ul>
* <li>{@link #sleep Thread.sleep}</li>
* <li>{@link Object#wait(long) Object.wait} with timeout</li>
* <li>{@link #join(long) Thread.join} with timeout</li>
* <li>{@link LockSupport#parkNanos LockSupport.parkNanos}</li>
* <li>{@link LockSupport#parkUntil LockSupport.parkUntil}</li>
* </ul>
*/
TIMED_WAITING,(无限等待)
/**
* Thread state for a terminated thread.
* The thread has completed execution.
*/
TERMINATED;(终结)
}

Java中线程的状态相关推荐

  1. java中线程的状态以及线程栈分析

    java中线程的状态 状态 说明 NEW 初始状态.线程刚刚被创建,并且start()方法还未被调用 RUNNABLE 运行状态.表示线程正在java虚拟机中执行,但是可能正在等待操作系统的其他资源, ...

  2. 并发基础篇(四): java中线程的状态深入浅出

    一.线程的五种状态   线程的生命周期可以大致分为5种,但这种说法是比较旧的一种说法,有点过时了,或者更确切的来说,这是操作系统的说法,而不是java的说法.但对下面所说的六种状态的理解有所帮助,所以 ...

  3. java 多线程状态_总结Java中线程的状态及多线程的实现方式

    线程的状态线程状态图: 说明: 线程共包括以下5种状态. 1. 新建状态(New) : 线程对象被创建后,就进入了新建状态.例如,Thread thread = new Thread(). 2. 就绪 ...

  4. Java中线程的状态。

    线程的状态:一个线程只能有一次NEW状态,和TERMINATED状态         NEW(新建状态):创建后,启动前.线程就处于该状态         RUNNABLE(可运行状态):线程正在执行 ...

  5. java 中线程的状态

    java中线程一共有六种状态: 这个是线程枚举类中的状态       New  :  新建状态 ,我刚创建一个线程,但是还没有执行start()方法,这个阶段就是新建状态. Runnable :  可 ...

  6. java中线程的6种状态

    java中线程的状态分为6种. 1. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法. 2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running ...

  7. java中线程的生命周期_Java中的线程生命周期– Java中的线程状态

    java中线程的生命周期 Understanding Thread Life Cycle in Java and Thread States are very important when you a ...

  8. Java中进入wait状态的线程被唤醒后会接着上次执行的地方往下执行还是会重新执行临界区的代码

    Java中进入wait状态的线程被唤醒后会接着上次执行的地方往下执行还是会重新执行临界区的代码 用一个例子来说明: 例子原理 启动一个线程A打印数字,从0打印到9,在数字等于5的时候,进入wait状态 ...

  9. 操作系统中进程的五种状态与JAVA中线程的六种状态

    操作系统中的五种状态 新建:创建新的进程 就绪:进程已经获得除CPU时间片以外的任何资源,一旦获得cpu时间片就能立马执行. 执行:处于就绪队列中的进程获得了时间片运行进程. 阻塞:进程时间片用完进入 ...

最新文章

  1. redis学习之——Redis事务(transactions)
  2. 2.1.2监测当前打印机状态
  3. 【AWSL】之Linux系统安全及应用(su、PAM、sudo、GRUB、JR、NMAP)
  4. [蓝桥杯2018初赛]乘积尾零-数论
  5. wince 6.0 pb
  6. 敏捷开发系列学习总结(13)——Spotify敏捷模式详解三部曲第一篇:研发团队
  7. 理解Unix/Linux系统中的文件描述符
  8. fastexcel读取excel追加写入sheet页_Python写入和读取excel
  9. 怎样的学术导师是好导师(Nature)
  10. dfs序七个经典问题(转)
  11. TV TimeShift和PVR的区别
  12. 2022最新Web前端经典面试试题及答案-史上最全前端面试题(含答案)
  13. C++setw函数的运用
  14. ORB-SLAM2学习笔记——BundleAdjustment函数
  15. ce游戏逆向修改之植物大战僵尸
  16. 摄影是一门接地气的的艺术
  17. 一个面试我的后端妹子问的405错误
  18. php推送消息到邮箱,thinkphp3.2通过PHPMailer发送邮件推送消息
  19. some untracked working tree files问题解决
  20. Linux系统调用四、lseek()函数详解

热门文章

  1. LabVIEW如何修复或重置NI MAX数据库文件
  2. performance tunning --shared pool
  3. ps中定义画笔和图案
  4. PostgreSQL 切勿kill -9去杀进程
  5. android auto 华为p30手机,华为p30专业模式如何使用?
  6. 题解--Stone的txl数
  7. JMockit学习教程
  8. 5G科普——浅析SBA
  9. 机械革命z2黑苹果改造计划第二番-MacOS实用软件渗透工具
  10. 基于uni-app的小程序开发记录