java 线程运行状态(Java中线程的状态)

网友投稿 235 2023-02-05


本篇文章给大家谈谈java 线程运行状态,以及Java中线程的状态对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 今天给各位分享java 线程运行状态的知识,其中也会对Java中线程的状态进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java多线程有哪些状态?

初始态java 线程运行状态:一个线程调用java 线程运行状态了new方法之后java 线程运行状态,并在调用start方法之前java 线程运行状态的所处状态。

就绪java 线程运行状态:一旦线程调用了start 方法,线程就转到Runnable 状态。

阻塞/ NonRunnable:线程处于阻塞/NonRunnable状态,这是由两种可能性造成的:要么是因挂起而暂停的,要么是由于某些原因而阻塞的,例如包括等待IO请求的完成。

停止/退出:线程转到退出状态,这有两种可能性,要么是run方法执行结束,要么是调用了stop方法。

谈谈OpenJDK中线程的9种状态

java 线程运行状态我在在查找了很多资料还有根据书籍java 线程运行状态,发现对于线程的状态,网上的说法各种各样的,这里就想做一个总结。

在jdk1.8 的源码当中,java中线程(Thread)的状态,注释里说的很清楚了,沿用的是1.5的,主要分为6种状态,每种状态之间都可以随着操作进行相互转换。后面会有OpenJDK的说法,一共是九种,别着急。

1.新建状态(New):

新创建了一个线程对象这个时候没有对他调用和执行。

2.运行中状态 RUNNABLE:

该状态可以被看成一 个复合状态。它包括两个子状态 java 线程运行状态:READY和RUNNING。前者表示处于该状态的线程可以被线程调度器(Scheduler)进行调度而使之处于RUNNING状态。后者表示处于该状态的线程正在运行,即相应线程对象的run方法所对应的指令正在由处理器执行。执行Thread.yield()的线程,其状态可能会由RUNNING转换为READY。处于READY子状态的线程也被称为活跃线程。

3.阻塞状态 BLOCKED:

一 个线程发起一个阻塞式 1/0 (Blocking I/0)操作后 12 , 或者申请一个由其他线程持有的独占资源(比如锁)时,相应的线程会处于该状态。处于BLOCKED状态的线程并不会占用处理器资源。当阻塞式I/0操作完成后,或者线程获得了其申请的资源,该线程的状态又可以转换为RUNNABLE。

一 个线程执行了某些特定方法之后就会处于这种等待其他线程执行另外一些特定操作的状态。能够使其执行线程变为WAITING状态的方法包括Object. wait()、 Thread.join()、LockSupport.park(Object)。能够使相应线程从WAITING变更为RUNNABLE的相应方法包括java 线程运行状态: Object.notify()/notify All()和LockSupport. unpark(Object))。

该状态和WAITING类似,差别在于处于该状态的线程并非尤限制地等待其他线程执行特定操作,而是处于带有时间限制的等待状态。当其他线程没有在指定时间内执行该线程所期望的特定操作时,该线程的状态自动转换为RUNNABLE。

6.终止状态 TERMINATED:

已经执行结束的线程处于该状态。由于一 个线程实例只能够被启动一 次,因此一 个线程也只可能有一次处于该状态。Thread.run()正常返回或者由于抛出异常而提前终止都会导致相应线程处于该状态。
附上源码
public enum State {
/**
* Thread state for a thread which has not yet started.
*/
NEW,

以上是在JDK1.8中的Thread源码中备注的。

然而也有一种说法,在JVM中对状态的定义是九种,这里说的是在OpenJDK中的

2.运行 (RUNNABLE):笔者的理解就是,start之后线程进入到run方法,执行run方法的状态,也就是网上所说的准备(ready)和运行(running);

3.睡眠(SLEEPING):线程调用sleep(),之后抱锁等待的状态;

4.对象等待(IN_OBJECT_WAIT):也就是对象调用wait()方法之后的释放锁等待;

5.对象超时等待(IN_OBJECT_WAIT_TIMED):该状态不同于WAITING,它可以在指定的时间后自行返回

6.挂起(PARKED):该状态是线程没有拿到锁之后,进入等待队列之后一直处于挂起状态;

7.挂起超时(PARKED_TIMED):该状态不同于PARKED,它可以在指定的时间后自行解除挂起

8.阻塞监视(BLOCKED_ON_MONITOR_ENTER):进入同步之后的状态,也就是线程进入到同步块中,或者同步锁中的状态,读者也可以理解为线程进入独占模式下的状态;

9.终止(TERMINATED):表示该线程已经执行完毕;

Java线程的几种状态

线程是一个动态执行的过程,它有一个从产生到死亡的过程,共五种状态:

1、新建(new Thread)

当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动)

例如:Thread t1=new Thread();

2、就绪(runnable)

线程已经被启动,正在等待被分配给CPU时间片,也就是说此时线程正在就绪队列中排队等候得到CPU资源。例如:t1.start();

3、运行(running)

线程获得CPU资源正在执行任务(run()方法),此时除非此线程自动放弃CPU资源或者有优先级更高的线程进入,线程将一直运行到结束。

4、堵塞(blocked)

由于某种原因导致正在运行的线程让出CPU并暂停自己的执行,即进入堵塞状态。

正在睡眠:用sleep(long t) 方法可使线程进入睡眠方式。一个睡眠着的线程在指定的时间过去可进入就绪状态。

正在等待:调用wait()方法。(调用notify()方法回到就绪状态)

被另一个线程所阻塞:调用suspend()方法。(调用resume()方法恢复)

5、死亡(dead)

当线程执行完毕或被其它线程杀死,线程就进入死亡状态,这时线程不可能再进入就绪状态等待执行。

自然终止:正常运行run()方法后终止

异常终止:调用stop()方法让一个线程终止运行

java线程的几种状态

总结了6种状态,希望对你所有帮助:

1、NEW 状态是指线程刚创建, 尚未启动

2、RUNNABLE 状态是线程正在正常运行中, 当然可能会有某种耗时计算/IO等待的操作/CPU时间片切换等, 这个状态下发生的等待一般是其他系统资源, 而不是锁, Sleep等

3、BLOCKED  这个状态下, 是在多个线程有同步操作的场景, 比如正在等待另一个线程的synchronized 块的执行释放, 或者可重入的 synchronized块里别人调用wait() 方法, 也就是这里是线程在等待进入临界区

4、WAITING  这个状态下是指线程拥有了某个锁之后, 调用了他的wait方法, 等待其他线程/锁拥有者调用 notify / notifyAll 一遍该线程可以继续下一步操作, 这里要区分 BLOCKED 和 WATING 的区别, 一个是在临界点外面等待进入, 一个是在临界点里面wait等待别人notify, 线程调用了join方法 join了另外的线程的时候, 也会进入WAITING状态, 等待被他join的线程执行结束

5、TIMED_WAITING  这个状态就是有限的(时间限制)的WAITING, 一般出现在调用wait(long), join(long)等情况下, 另外一个线程sleep后, 也会进入TIMED_WAITING状态

6、TERMINATED 这个状态下表示 该线程的run方法已经执行完毕了, 基本上就等于死亡了(当时如果线程被持久持有, 可能不会被回收)

线程的六种状态

线程整个生命周期分为六种状态:NEW状态、RUNNABLE状态、BLOCKED状态、WAITING状态、TIMED_WAITING状态、TERMINATED状态。其中NEW状态、RUNNABLE状态与TERMINATED状态是每个线程必定经历java 线程运行状态的状态。下面java 线程运行状态我大致讲解一下每个状态的具体效果。

        NEW状态:尚未启动的线程处于此状态。

        RUNNABLE状态:在Java虚拟机中执行的线程处于此状态。

        BLOCKED状态:被阻塞等待监视器锁定的线程处于此状态。

        WAITING状态:无限期等待另一个线程执行特定操作的线程处于此状态。

        TIMED_WAITING状态:正在等待另一个线程执行最多指定等待时间的操作的线程处于此状态。

        TERMINATED状态:已退出的线程处于此状态。

        流程创建后未启动会进入NEW状态,启动后进入RUNNABLE状态,执行线程任务,结束线程释放,进入TERMIBATED状态。而在RUNNABLE状态时可能会出现由于时间片到期,程序从内部暂停等情况进入阻塞(BLOCKED状态、WAITING状态和TIME_WAITING状态大都可以理解为阻塞),而当达到一定的条件,如程序对线程的唤醒,或争抢到时间片时,线程从阻塞进入RUNNABLE状态。

关于java 线程运行状态和Java中线程的状态的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。 java 线程运行状态的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于Java中线程的状态、java 线程运行状态的信息别忘了在本站进行查找喔。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:基于node搭建服务器,写接口,调接口,跨域的实例
下一篇:禁止用户连接共享文件夹(禁止用户连接共享文件夹怎么办)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~