Java线程状态
–
目录
线程状态

1.新建状态(New)
用new语句创建的线程对象处于新建状态(New),此时它和其他Java对象一样,仅仅在堆中被分配了内存。
2.就绪状态(Runnable)
调用start()方法后该线程进入就绪状态,Java虚拟机会为它创建方法调用栈和程序计数器。处于这个状态的线程位于可运行池中,等待CPU的使用权
3.运行状态(Running)
处于运行状态的线程占用CPU,执行代码。在并发运行的环境中如果计算器只有一个CPU,那么任何时刻只会有一个线程处于这个状态。如果计算机有多个CPU,那么同一时刻可以让几个线程占用不同的CPU,使他们处于运行状态**。只有处于就绪(Runnable)就绪状态的线程才有机会转到运行状态。**
4.阻塞状态(Blockd)
线程因为某些原因放弃CPU,暂时停止运行。当线程处于阻塞状态时,Java虚拟机不会不给线程分配CPU,知道线程重新进入就绪状态,才有机会转到运行状态。
阻塞状态分为3种:
4.1 位于对象等待池中的阻塞状态(Blocked in object’s wait pool):
运行中的线程执行了某个对象的wait()方法,Java虚拟机会把这个线程放到这个对象的等待池中
4.2 位于对象锁池中的阻塞状态(Blocked in object’s lock pool):
线程处于运行状态,试图获得某个对象的同步锁时,如果该对象同步锁被其他线程占用,Java虚拟机就会把这个线程放到这个对象的锁池中
4.3 其他阻塞状态(otherwise Blocked ):
当前线程执行了sleep()方法,或者调用了其他线程的join()方法,或者发出了I/O请求时(当线程执行System.out.println()或者System.in.read()方法后就会发出一个I/O请求,该线程放弃CPU,进入阻塞状态,直到I/O处理完毕,该线程才会恢复运行),就会进入这个状态。
5.死亡状态(Dead)
当线程退出run()方法以后,就进入死亡状态(Dead),该线程结束声明周期。线程有可能时正常执行完run()方法退出,也有可能遇到异常而退出。
Thread.isAlive()//判断线程是否还活着,返回true false
注:学习内容和代码,来源自《JAVA 面向对象编程》(第二版)作者:孙卫琴
本文详细介绍了Java线程的五种状态,包括新建、就绪、运行、阻塞和死亡状态。线程在运行过程中可能因等待对象、锁或I/O操作而进入不同类型的阻塞状态。了解这些状态对于优化并发程序至关重要。
10万+

被折叠的 条评论
为什么被折叠?



