2012-06-23 241 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