博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程的状态
阅读量:7083 次
发布时间:2019-06-28

本文共 914 字,大约阅读时间需要 3 分钟。

hot3.png

        线程共有六种状态:

        1.NEW(新生):当用new操作符创建一个新线程时,该线程还没有开始运行,此时它的状态是NEW。

        2.RUNNABLE(可运行的):当线程调用start方法后,该线程即处于RUNNABLE状态。之所以是RUNNABLE,是因为此时线程可能在运行,也可能没有运行,这取决于操作系统给线程提供的时间。线程调度的细节依赖于操作系统提供的服务。抢占式调度系统给每一个可运行线程一个时间片来执行任务。当时间片用完,操作系统剥夺该线程的运行权,并给另外的线程运行机会。当选择下一个线程时,操作系统会考虑程序的优先级(协调式调度系统中,优先级没用)。

        3.BLOCKED(被阻塞的)、4.WATING(等待)、5.TIMED WATING(计时等待):当线程处于被阻塞或者等待状态时,它暂时不活动,不运行任何代码并且消耗最少的资源。直到线程调度器重新激活它:

        1)当一个线程试图获取一个内部的对象锁(不是java.util.concurrent库中的锁),而该锁被其它线程持有,则该线程进入阻塞状态(BLOCKED)。当其它线程释放该锁,并且线程调度器允许它持有该锁时,该线程将变成非阻塞状态(RUNNABLE)。
        2)当线程等待另一个线程通知调度器一个条件时,它进入等待状态(WATING)。在调用Object.wait方法、Thread.join方法,或者是等待java.util.concurrent库中的Lock或Condition时,就会出现这种情况。
        3)有几种方法有一个超时参数,调用它们导致线程进入计时等待状态(TIMED WATING)。这一状态将一直保持到超时期满或者接收到适当的通知。带有超时参数的方法有Tread.sleep、Object.wait、Thread.join、Lock.tryLock以及Condition.await的计时板。

        6.TERMINATED(已终止):线程在下列两种情况下将被终止:1)因为run方法正常退出而自然死亡。2)因为一个没有捕获的异常终止了run方法而意外死亡。

转载于:https://my.oschina.net/u/272863/blog/92310

你可能感兴趣的文章
1013A.Piles With Stones
查看>>
multipart/form-data和application/x-www-form-urlencoded的区别
查看>>
php 搜索附近人及SQL语句的写法
查看>>
拖拽(兼容版)
查看>>
Python中and和or的运算法则
查看>>
Raspberry Pi使用USB摄像头远程监控
查看>>
Ruby-selenium-webdriver(安装准备篇)
查看>>
今天愣了半天硬是没想到用map,在此还原以下代码
查看>>
【转】UITableViewCell自适应高度 UILabel自适应高度和自动换行
查看>>
网络问卷调查js实现代码
查看>>
mark住先
查看>>
mysql事物处理
查看>>
c++中的基本知识点
查看>>
一些js在线引用文档
查看>>
关键路径
查看>>
动态数组的使用
查看>>
NoSQL之Redis学习小结
查看>>
通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。...
查看>>
OpenJudge / Poj 1833 排列 C++
查看>>
如何查看大型工程源代码(前辈的提点)
查看>>