线程的生命周期和状态
2017-03-11 15:38
141 查看
线程的五个状态:新建、就绪、运行、阻塞、死亡。
新建状态:当使用new来新建一个线程时、该线程就处于新建状态,和其它JAVA中的对象没有区别,JVM为其分配内存。
就绪状态:当线程调用了start方法后,该线程就处于就绪状态。JVM为其创建方法调用栈和程序计数器,处于这个状态的线程并没有开始运行,只是表示这个线程可以运行了,至于什么时候运行,由JVM中的线程调度决定。
运行状态:如果处于就绪状态的线程获得了CPU,开始执行run方法中的线程执行体,那么该线程就处于运行状态。
阻塞状态:当发生如下情况,线程将进入阻塞状态:1、线程调用sleep方法主动放弃所占用的处理器资源。2、线程调用了一个阻塞式IO方法,在方法返回之前,该线程被阻塞。3、线程试图获得一个同步监视器,但该同步监视器被其他线程所持有。4、线程在等待某个通知。5、程序调用了线程的suspend方法将该线程挂起(易导致死锁)。如果以上的问题解决了,线程将进入就绪状态,而不是直接进入运行状态。
死亡状态:以下情况,线程处于死亡状态:1、run()或call()方法执行完成,线程正常结束。2、线程抛出一个未捕获的Exception或Error。3、直接调用该线程的stop()方法来结束该线程(易导致死锁)。注:线程死亡就是死亡,不能重新被再次执行,也不要重新调用该线程的start方法,将会抛出IllegalThreadStateException。
新建状态:当使用new来新建一个线程时、该线程就处于新建状态,和其它JAVA中的对象没有区别,JVM为其分配内存。
就绪状态:当线程调用了start方法后,该线程就处于就绪状态。JVM为其创建方法调用栈和程序计数器,处于这个状态的线程并没有开始运行,只是表示这个线程可以运行了,至于什么时候运行,由JVM中的线程调度决定。
运行状态:如果处于就绪状态的线程获得了CPU,开始执行run方法中的线程执行体,那么该线程就处于运行状态。
阻塞状态:当发生如下情况,线程将进入阻塞状态:1、线程调用sleep方法主动放弃所占用的处理器资源。2、线程调用了一个阻塞式IO方法,在方法返回之前,该线程被阻塞。3、线程试图获得一个同步监视器,但该同步监视器被其他线程所持有。4、线程在等待某个通知。5、程序调用了线程的suspend方法将该线程挂起(易导致死锁)。如果以上的问题解决了,线程将进入就绪状态,而不是直接进入运行状态。
死亡状态:以下情况,线程处于死亡状态:1、run()或call()方法执行完成,线程正常结束。2、线程抛出一个未捕获的Exception或Error。3、直接调用该线程的stop()方法来结束该线程(易导致死锁)。注:线程死亡就是死亡,不能重新被再次执行,也不要重新调用该线程的start方法,将会抛出IllegalThreadStateException。
相关文章推荐
- 线程的生命周期与线程状态
- [转]Java 对象锁-synchronized()与线程的状态与生命周期
- 线程生命周期状态图
- Java—多线程(二)、线程的生命周期和状态控制
- 线程的生命周期和状态控制
- Java中的线程的生命周期大体可分为5种状态
- Java多线程(二)、线程的生命周期和状态控制
- 13.3线程的生命周期与线程状态
- 线程生命周期状态UML图
- Java多线程(二)、线程的生命周期和状态控制
- 13.6 线程的生命周期状态,线程常用的方法
- java——线程生命周期waiting状态和blocked状态的区别
- 线程的生命周期和状态控制
- 线程的生命周期及五种基本状态
- java线程(Thread)——wait、sleep、notify、线程的生命周期、状态
- 线程的生命周期(线程状态)
- 线程Thread的生命周期以及状态
- Java多线程(二)、线程的生命周期和状态控制
- 线程的生命周期 - 理解Java中线程的状态
- 线程的生命周期与线程状态