Thread的interrupt機制
執行緒打斷是自我打斷
當呼叫執行緒的interrupt()
方法時,被打斷的執行緒不會立刻被打斷,只是它裡面的一個狀態被改變.
@Override
public void run() {
//執行緒被其他執行緒打斷時,但還會一直執行
while (true) {
//true
System.out.println("執行緒是否被打斷:" + this.isInterrupted());
//true
System.out.println("執行緒確認是否被打斷:" + this.isInterrupted());
}
}
interrupted()會使中斷狀態重置
被中斷執行緒可以通過interrupted()對狀態進行檢測,如果是被中斷狀態時,返回true,然後注意,此時的中斷狀態會被重置到未被打斷狀態,因此,被中斷執行緒可以通過呼叫一次該值不做任何處理,讓自己不被中斷.
@Override
public void run() {
while (true) {
//true
System.out.println("執行緒是否被打斷:" + this.isInterrupted());
//true
System.out.println("執行緒確認是否被打斷:" + this.isInterrupted());
//判斷是否被中斷
if(Thread.interrupted()){
System.out.println("執行緒被中斷");
//此時返回 false
System.out.println("Thread.interupted():"+Thread.interrupted());
break;
}
}
}
isInterrupted()方法不會重置清除狀態
內部呼叫本地方法 private native boolean isInterrupted(boolean ClearInterrupted);
引數為false.
而上面的interrupted()方法也是呼叫了這個本地方法,只不過引數為ture.
InterruptedException異常不代表執行緒被中斷
另外的執行緒呼叫一個正在sleep(),或者wait()的執行緒的interrupt方法時,此時被中斷執行緒會丟擲一個異常,說明在休眠的執行緒中斷是會被通知的,且此時的中斷狀態為false,也就是說中斷休眠的執行緒是不會成功的,所以執行緒還是要自我打斷的。
@Override
public void run() {
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println("捕獲中斷異常");
//輸出 false
System.out.println("執行緒確認是否被打斷:"+this.isInterrupted());
//輸出true
this.interrupt();
System.out.println("是否被self打斷:"+this.isInterrupted());
break;
}
}
}
相關文章
- thread.Interrupt()與thread.Abort()thread
- Thread執行緒終止interruptthread執行緒
- Thread interrupt() 執行緒中斷的詳細說明thread執行緒
- Linux核心機制—smp_hotplug_threadLinuxthread
- JNI-從jvm原始碼分析Thread.interrupt的系統級別執行緒打斷原理JVM原始碼thread執行緒
- interrupt(),interrupted() 和 isInterrupted() 的區別
- HDFS 02 - HDFS 的機制:副本機制、機架感知機制、負載均衡機制負載
- Java的Interrupt與執行緒中斷Java執行緒
- rt-thread AT元件偶爾當機的問題thread元件
- 響應式流的核心機制——背壓機制
- 【雜談】執行緒中斷——Interrupt執行緒
- 探索JavaScript的this機制JavaScript
- PHP 的 SESSION 機制PHPSession
- Java的反射機制Java反射
- Java 的 SPI 機制Java
- Redis的事件機制Redis事件
- Java的代理機制Java
- Java的SPI機制Java
- Threadthread
- 【執行機制】 JavaScript的事件迴圈機制總結 eventLoopJavaScript事件OOP
- interrupt結構體和相關函式結構體函式
- JavaScript的垃圾收集機制JavaScript
- RecyclerView的複用機制View
- 強大的CAS機制
- Dubbo的微核心機制
- Rust 的宣告宏機制Rust
- 反射機制的基本用法反射
- Go GC 機制的大坑GoGC
- Kafka Consumer 的 Rebalance 機制Kafka
- Java 中的 反射機制Java反射
- Angular的DOM更新機制Angular
- 類的載入機制
- 多型的機制原理多型
- JS的垃圾回收機制JS
- Pod的排程機制
- redis的持久化機制Redis持久化
- MyBatis 的快取機制MyBatis快取
- mysql myisam的鎖機制MySql