当前位置:网站首页>Thread State 详解
Thread State 详解
2022-08-10 21:11:00 【InfoQ】
前言
絮叨
线程状态转换图
- NEW 初始状态
- RUNNABLE 运行状态
- BLOCKED 阻塞状态
- WAITING 等待状态
- TIME_WAITING 超时等待状态
- TERMINATED 终止状态
阻塞与等待的区别
主要操作
start()
public synchronized void start() {
//判断是否首次启动
if (threadStatus != 0)
throw new IllegalThreadStateException();
group.add(this);
boolean started = false;
try {
//启动线程
start0();
started = true;
} finally {
try {
if (!started) {
group.threadStartFailed(this);
}
} catch (Throwable ignore) {
/* do nothing. If start0 threw a Throwable then
it will be passed up the call stack */
}
}
}
private native void start0();
run()
sleep()
sleep(long millis) //参数为毫秒
sleep(long millis,int nanoseconds) //第一参数为毫秒,第二个参数为纳秒
yield()
join()
1 join()
2 join(long millis) //参数为毫秒
3 join(long millis,int nanoseconds) //第一参数为毫秒,第二个参数为纳秒
public final synchronized void join(long millis) throws InterruptedException {
long base = System.currentTimeMillis();
long now = 0;
if (millis < 0) {
throw new IllegalArgumentException("timeout value is negative");
}
//0则需要一直等到目标线程run完
if (millis == 0) {
while (isAlive()) {
wait(0);
}
} else {
//如果目标线程未run完且阻塞时间未到,那么调用线程会一直等待。
while (isAlive()) {
long delay = millis - now;
if (delay <= 0) {
break;
}
wait(delay);
now = System.currentTimeMillis() - base;
}
}
}
interrupt()
- 如果线程sleep()、wait()、join()等处于阻塞状态,那么线程会定时检查中断状态位如果发现中断状态位为true,则会在这些阻塞方法调用处抛出InterruptedException异常,并且在抛出异常后立即将线程的中断状态位清除,即重- 新设置为false。抛出异常是为了线程从阻塞状态醒过来,并在结束线程前让程序员有足够的时间来处理中断请求。
- 如果线程正在运行、争用synchronized、lock()等,那么是不可中断的,他们会忽略。
- isInterrupted()
- 此方法只会读取线程的中断标志位,并不会重置。
- interrupted()
- 此方法读取线程的中断标志位,并会重置。
- throw InterruptException
- 抛出该异常的同时,会重置中断标志位。
结尾
日常求赞
边栏推荐
- 【vulhub】MySql身份认证绕过漏洞复现(CVE-2012-2122)
- TCL:事务的特点,语法,测试例——《mysql 从入门到内卷再到入土》
- 优化是一种习惯●出发点是'站在靠近临界'的地方
- 石油化工行业商业供应链管理系统:标准化供应商管理,优化企业供应链采购流程
- INSERT:插入操作语法&使用例——《mysql 从入门到内卷再到入土》
- 2021 CybricsCTF
- The use of TortoiseSVN little turtle
- DELETE:删除操作语法&使用例——《mysql 从入门到内卷再到入土》
- ACM模板笔记:八数码问题——使用BFS+康托展开打表解决
- C. Social Distance
猜你喜欢
Live Classroom System 09--Tencent Cloud VOD Management Module (1)
TCL:事务的特点,语法,测试例——《mysql 从入门到内卷再到入土》
Live Classroom System 08-Tencent Cloud Object Storage and Course Classification Management
【SQL刷题】Day3----SQL必会的常用函数专项练习
RADIUS Authentication Server Deployment Costs That Administrators Must Know
化学制品制造业数智化供应链管理系统:建立端到端供应链采购一体化平台
Are you hungry - Institution tree radio
paddle 35 paddledetection保存训练过程中的log信息
【PCBA方案】电子握力测试仪方案she‘ji
异常的了解
随机推荐
用汇编带你看Golang里到底有没有值类型、引用类型
DDL:视图——《mysql 从入门到内卷再到入土》
Future与CompletableFuture
apr_thread使用内存之谜
The use of TortoiseSVN little turtle
内置模板市场,DataEase开源数据可视化分析平台v1.13.0发布
Kubernetes Notes / Getting Started / Production Environment / Installing Kubernetes with Deployment Tools / Starting a Cluster with kubeadm / Creating a Cluster with kubeadm
每次打开chrome会跳出What's new
SELECT:简单的查询操作语法&使用例——《mysql 从入门到内卷再到入土》
根心与根轴
2022.8.8好题选讲(数论场)
APP application related instructions in Auto.js
Using SylixOS virtual serial port, serial port free implementation system
如何保护 LDAP 目录服务中的用户安全?
Application of Spatial 3D Model Reconstruction Based on Pix4Dmapper - Spatial Analysis and Site Selection
Web Reverse Lilac Garden
TCL:事务的特点,语法,测试例——《mysql 从入门到内卷再到入土》
Interpretation of the paper (g-U-Nets) "Graph U-Nets"
UPDATE:修改数据语法使用例——《mysql 从入门到内卷再到入土》
INSERT:插入操作语法&使用例——《mysql 从入门到内卷再到入土》