Java线程状态

简介: Java线程状态

     一个线程对象在它的生命周期内,需要经历5个状态。

新生状态(New)

 用new关键字建立一个线程对象后,该线程对象就处于新生状态。处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态。

就绪状态(Runnable)

 处于就绪状态的线程已经具备了运行条件,但是还没有被分配到CPU,处于“线程就绪队列”,等待系统为其分配CPU。就绪状态并不是执行状态,当系统选定一个等待执行的Thread对象后,它就会进入执行状态。一旦获得CPU,线程就进入运行状态并自动调用自己的run方法。有4中原因会导致线程进入就绪状态:


     1. 新建线程:调用start()方法,进入就绪状态;


     2. 阻塞线程:阻塞解除,进入就绪状态;


     3. 运行线程:调用yield()方法,直接进入就绪状态;


     4. 运行线程:JVM将CPU资源从本线程切换到其他线程。


运行状态(Running)


     在运行状态的线程执行自己run方法中的代码,直到调用其他方法而终止或等待某资源而阻塞或完成任务而死亡。如果在给定的时间片内没有执行结束,就会被系统给换下来回到就绪状态。也可能由于某些“导致阻塞的事件”而进入阻塞状态。


阻塞状态(Blocked)


     阻塞指的是暂停一个线程的执行以等待某个条件发生(如某资源就绪)。有4种原因会导致阻塞:


     1. 执行sleep(int millsecond)方法,使当前线程休眠,进入阻塞状态。当指定的时间到了后,线程进入就绪状态。


     2. 执行wait()方法,使当前线程进入阻塞状态。当使用nofity()方法唤醒这个线程后,它进入就绪状态。


     3. 线程运行时,某个操作进入阻塞状态,比如执行IO流操作(read()/write()方法本身就是阻塞的方法)。只有当引起该操作阻塞的原因消失后,线程进入就绪状态。


     4. join()线程联合: 当某个线程等待另一个线程执行结束后,才能继续执行时,使用join()方法。


死亡状态(Terminated)


     死亡状态是线程生命周期中的最后一个阶段。线程死亡的原因有两个。一个是正常运行的线程完成了它run()方法内的全部工作; 另一个是线程被强制终止,如通过执行stop()或destroy()方法来终止一个线程(注:stop()/destroy()方法已经被JDK废弃,不推荐使用)。


     当一个线程进入死亡状态以后,就不能再回到其它状态了。

目录
相关文章
|
安全 Java 程序员
Java多线程(1)---多线程认识、四种创建方式以及线程状态
Java多线程(1)---多线程认识、四种创建方式以及线程状态
125 0
|
5月前
|
Java 调度
|
5月前
|
Java API 调度
深入解析Java线程状态与生命周期
深入解析Java线程状态与生命周期
39 1
|
4月前
|
Java
Jstack 查看线程状态及定位占用 cpu 较高的 java 线程
Jstack 查看线程状态及定位占用 cpu 较高的 java 线程
641 2
|
5月前
|
Java API
详细探究Java多线程的线程状态变化
Java多线程的线程状态主要有六种:新建(NEW)、可运行(RUNNABLE)、阻塞(BLOCKED)、等待(WAITING)、超时等待(TIMED_WAITING)和终止(TERMINATED)。线程创建后处于NEW状态,调用start()后进入RUNNABLE状态,表示准备好运行。当线程获得CPU资源,开始执行run()方法时,它处于运行状态。线程可以因等待锁或调用sleep()等方法进入BLOCKED或等待状态。线程完成任务或发生异常后,会进入TERMINATED状态。
21232 5
|
6月前
|
Java 调度
Java 多线程系列Ⅰ(创建线程+查看线程+Thread方法+线程状态)
Java 多线程系列Ⅰ(创建线程+查看线程+Thread方法+线程状态)
|
6月前
|
Java 调度
Java多线程基础-5:线程状态与状态的转移
本文介绍了Java中线程的五种状态:NEW、TERMINATED、RUNNABLE、TIMED_WAITING和BLOCKED,并提供了代码示例来展示状态转换。
48 0
|
6月前
|
Java 调度
JAVA 并发编程 线程状态
Thread.State 枚举类中记录了 Java 中定义的线程状态信息。
|
6月前
|
Java
Java中线程状态的描述
Java中线程状态的描述
55 0
|
Java API 调度
Java中的线程状态总结
Java中的线程状态总结
下一篇
无影云桌面