Java线程-线程的基本状态
2024-09-07 12:55:33
问题:线程有哪些基本状态?这些状态是如何定义的?
- 新建(new):新创建了一个线程对象。
- 可运行(runnable):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu的使用权。
- 运行(running):可运行状态(runnable)的线程获得了cpu时间片(timeslice),执行程序代码。
- 阻塞(block):阻塞状态是指线程因为某种原因放弃了cpu使用权,也即让出了cpu timeslice,暂时停止运行。直到线程进入可运行(runnable)状态,才有 机会再次获得cpu timeslice转到运行(running)状态。
- 阻塞的情况分三种:
- (一). 等待阻塞:运行(running)的线程执行o.wait()方法,JVM会把该线程放 入等待队列(waitting queue)中。
- (二). 同步阻塞:运行(running)的线程在获取对象的同步锁时,若该同步锁 被别的线程占用,则JVM会把该线程放入锁池(lock pool)中。
- (三). 其他阻塞: 运行(running)的线程执行Thread.sleep(long ms)或t.join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入可运行(runnable)状态。
- 死亡(dead):线程run()、main()方法执行结束,或者因异常退出了run()方法,则该线程结束生命周期。死亡的线程不可再次复生。
最新文章
- Freemarker中空值 null的处理++++定义数组
- HAProxy
- EXCLE使用中常用函数和公式
- javascript 字符串数组链接
- cordova android ios
- Linux下对后台进程通过kill传递信号不起作用的问题
- 解决 setOnItemClickListener,setOnScrollListener与setOnTouchListener事件冲突问题
- springmvc 传递和接收数组参数
- 结构-行为-样式-angularJs ngAnimate(Js实现)
- hust1010 kmp
- 移动端300ms的点击延迟以及解决方案
- Spring--ClassPathResource
- [Swift]LeetCode279. 完全平方数 | Perfect Squares
- operator用法:隐式类型转换
- logback log4j log4j2 性能实测
- Eigen使用矩阵作为函数参数
- Alpha阶段项目复审(冲鸭队)
- 解决zabbix可用性为灰色状态
- eclipse自动添加注释
- Python实现机器学习算法:EM算法