2012-06-23 243 views
1

中斷執行程序線程的正確方法是什麼? 我有這樣的: 線程類名工人與方法:如何中斷執行程序線程

public void run() { 
    while(!(Thread.currentThread().isInterrupted()){ 
     System.out.println("work " + Thread.currentThread().getName() + ":" + Thread.currentThread().isInterrupted()); 
    } 
} 

及主要類:

ExecutorService executorService = Executors.newFixedThreadPool(threadCount); 
Worker worker = new Worker();     
executorService.execute(worker); 

我打電話worker.interrupt();executorService.shutdownNow();但我的線程的推移和isInterrupted( )是錯誤的。

+0

檢查了這一點,其可能是一個可能的重複http://stackoverflow.com/questions/7142665/why-does-thread-isinterrupted-always-return-false – GETah

回答

1

你能發表所有相關的代碼嗎?根據您提供的信息,我無法重現您描述的行爲。看到SSCCE是按預期工作如下 - 輸出:

工作池1線程1:假
工作池1線程1:假
工作池1線程1:假
....
線程已經中斷

代碼:

public class Test { 

    public static void main(String[] args) throws InterruptedException { 
     ExecutorService executorService = Executors.newFixedThreadPool(1); 
     Worker worker = new Worker(); 
     executorService.execute(worker); 
     executorService.shutdownNow(); 
    } 

    public static class Worker extends Thread { 

     public void run() { 
      while (!Thread.currentThread().isInterrupted()) { 
       System.out.println("work " + Thread.currentThread().getName() + ":" + Thread.currentThread().isInterrupted()); 
      } 
      System.out.println("Thread has been interrupted"); 
     } 
    } 
} 
+0

謝謝你的答案。你的代碼工作正常,與我的不同,在運行方法的Worker類中,我使用JMS。只有一行'messageService.sendMessage(message);'如果我評論它,線程停止,如果不是它總是'工作池-1線程-1:錯誤'。我可以停止線程只是我自己的國旗,而不是isInterrupted() – user1406196

+0

可能是因爲該方法阻止... – assylias