[英]Interrupt a thread in java
我找到了此解決方案,以了解線程是否已被中斷。
public class OurThread extends Thread(){
private volatile boolean stop = false;
public void run(){
while (!stop) {
//Do your actions
}
}
}
但是我的run方法只執行一次,因此堅持使用while循環是沒有意義的。 我發現的另一種方法是檢查Thread.isInterrupted()標志,然后終止線程。 我的run()方法很長,因此我必須多次檢查這種情況,使我的代碼變臟。
我必須將此應用到四個不同的過程中,以便即時嘗試找到一個更簡單,更簡潔的方式。 我希望是否有類似的東西:
try{//my code}
catch(interrumption)
問題在於,由於我的線程是通過使用future.cancel()插入的,因此中斷不會在我的run()代碼內引發,所以我也不能這樣做。
有什么建議嗎? 現在,我檢查了兩次代碼之間的多次線程是否已取消。 謝謝 :)
首先,不要擴展Thread,您應該實現Runnable或Callable。
其次,您可以添加類似
static void checkInterrupt() {
if(Thread.currentThread().isInterrupted())
throw new IllegalStateException("Interrupted");
}
並將其放置在四個位置。 這不會添加太多代碼,並且不會像不會停止的任務那樣丑陋。
除非您的任務(Runnable或Callable)具有內置的響應中斷機制,否則它不會被中斷。 同樣,這取決於您的設計。 例如,確切地預期任務將被中斷。 通常,當任務達到安全狀態時我們會這樣做。
因此,您可以檢查是否收到中斷,然后做出適當的響應。 要重用代碼,可以使用@Peter建議的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.