簡體   English   中英

中斷Java中的線程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM