一、thread.sleep() 為什麼要丟擲 interruptedexception
其實最主要的目的是為了讓被打斷的執行緒具有響應中斷的能力(打斷只是設定標記而已,目的是為了讓被打斷的執行緒擁有感知能力,是否應該被打斷由自己控制,而不是由外部的執行緒去決定)
具體可以參考這篇部落格,寫的挺好的
二、如何在乙個執行緒中優雅的關閉另外乙個執行緒
1、呼叫 stop 方法
stop 方法會真正的殺死執行緒,但是如果在殺死指定執行緒的那一刻該執行緒鎖住了一些共享資源的話,那麼當該執行緒被殺死後就再也沒有機會釋放鎖,其它的執行緒就再也無法獲取到鎖,也就不能訪問到某些共享資源了
2、system.exit(int)
我們的目的僅僅是為了停止某乙個執行緒,但這種做法會讓整個程式都停止執行
3、interrupt
@slf4j執行結果public class threaddemo
try catch (interruptedexception e) ",thread.currentthread().isinterrupted());
// 呼叫 interrupt() 方法,將打斷標記置為 true
thread.currentthread().interrupt();
log.info("呼叫 interrupt() 方法之後,打斷標記為: {}",thread.currentthread().isinterrupted());}}
};thread t1 = new thread(runnable, "t1");
t1.start();
log.info("main 執行緒 start...");
thread.sleep(5 *1000);
// 在 main 執行緒中呼叫 interrupt() 方法中斷 t1 執行緒
t1.interrupt();}}
阻塞狀態的執行緒被打斷會丟擲 interruptedexception,並且會擦除打斷標記,所以需要再次呼叫 interrupt() 方法重新設定打斷標記
執行緒的interrupt方法
如下 片段 thread thread new thread thread.start thread.interrupt system.out.println end 呼叫了interrupt方法卻沒有產生中斷的原因 對執行緒的interrupt是對執行緒處在sleep,wait,join狀態的時候...
Interrupt方法結束執行緒
4.1.5.3.interrupt 方法結束執行緒使用interrupt 方法來中斷執行緒有兩種情況 1.執行緒處於阻塞狀態 如使用了sleep,同步鎖的wait,socket中的receiver,accept等方法時,會使執行緒處於阻塞狀態。當呼叫執行緒的interrupt 方法時,會丟擲inte...
java多執行緒interrupt 方法
執行緒a與執行緒b,在業務中,常常因為執行緒之前的業務關係,需要互相影響,甚至是a去中斷b,thread.interrupt 提供了這樣乙個操作。例子 package com.threadtest public class threadinterruptedtest catch interrupte...