当前位置:网站首页>The Thread State,
The Thread State,
2022-08-10 22:04: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");
}
//0You need to wait until the target threadrun完
if (millis == 0) {
while (isAlive()) {
wait(0);
}
} else {
//If the target thread is notrunis finished and the blocking time has not expired,Then the calling thread will wait forever.
while (isAlive()) {
long delay = millis - now;
if (delay <= 0) {
break;
}
wait(delay);
now = System.currentTimeMillis() - base;
}
}
}
interrupt()
- 如果线程sleep()、wait()、join()等处于阻塞状态,那么线程会定时检查中断状态位如果发现中断状态位为true,则会在这些阻塞方法调用处抛出InterruptedException异常,并且在抛出异常后立即将线程的中断状态位清除,即重- New set tofalse.抛出异常是为了线程从阻塞状态醒过来,并在结束线程前让程序员有足够的时间来处理中断请求.
- 如果线程正在运行、争用synchronized、lock()等,那么是不可中断的,他们会忽略.
- isInterrupted()
- 此方法只会读取线程的中断标志位,并不会重置.
- interrupted()
- 此方法读取线程的中断标志位,并会重置.
- throw InterruptException
- 抛出该异常的同时,会重置中断标志位.
结尾

日常求赞
边栏推荐
- GMT,UTC,CST,DST,RTC,NTP,SNTP,NITZ: 嵌入式的时间
- unusual understanding
- 每次打开chrome会跳出What's new
- Huawei router clock near the drainage experiment (using stream strategy)
- 2022.8.8 Selected Lectures on Good Topics (Number Theory Field)
- 企业云存储日常运行维护实践经验分享
- RADIUS Authentication Server Deployment Costs That Administrators Must Know
- Play RT-THREAD of doxygen
- ArcPy读取Excel时序数据、批量反距离加权IDW插值与掩膜
- Future与CompletableFuture
猜你喜欢
随机推荐
企业云存储日常运行维护实践经验分享
xshell (sed command)
shell programming without interaction
财务年报怎样翻译,为什么要选择专业翻译公司?
Translating scientific and technological papers, how to translate from Russian to Chinese
Black cat takes you to learn Makefile Part 11: When the header file a.h changes, how to recompile all the .c files that depend on the header file a.h
Redis Performance Impact - Asynchronous Mechanisms and Response Latency
labelme-5.0.1版本编辑多边形闪退
ArcGIS自动随机生成采样点的方法
为什么一般公司面试结束后会说「回去等消息」,而不是直接告诉面试者结果?
LeetCode-498 - Diagonal Traversal
GAN CFOP
DELETE:删除操作语法&使用例——《mysql 从入门到内卷再到入土》
mmpose关键点(一):评价指标(PCK,OKS,mAP)
Service - DNS forward and reverse domain name resolution service
ENVI自动生成地面控制点实现栅格影像的自动地理配准
2022.8.8 Selected Lectures on Good Topics (Number Theory Field)
[SQL brush questions] Day3----Special exercises for common functions that SQL must know
基于Pix4Dmapper的运动结构恢复法无人机影像三维模型重建
The perfect alternative to domestic Gravatar avatars Cravatar









