2015-09-08 174 views
1

我有方法的类(其中运行的线程):中断线程

public void execute() { 
    List<Task> task = read(); 
    for (Task task: tasks) { 
     Thread thread = new Thread(task); 
     thread.start(); 
     try { 
      thread.join(); 
     } catch (InterruptedException e) { 
      break; 
     } 
    } 
} 

而且我有方法的一些任务类是这样的:

public void run() { 
    Thread.currentThread.interrupt(); 
} 

如何设置中断从任务类的主要类?

+0

传递给主线程的引用到任务线程,那么只需要调用'了Thread.interrupt()'上的参考。 –

+0

@AndyTurner这不是个好主意,任务是在另一个地方创建的。你知道另一个解决方案吗? – nelinuj

+0

建议您查看http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ThreadPoolExecutor.html和关联的类。通过使用这些新类来处理这种基本问题,可以避免许多问题。 –

回答

0

我希望我能理解你的情况,这可能会有所帮助。尝试一下。

try { 
     thread.join(); 
     if(thread.isInterupted()){break;/*?!*/} 
    } catch (InterruptedException e) { 
     break; 
    } 


或者

/*public static */volatile boolean work=true; 
public void execute() { 
    List<Task> task = read(); 
    for (Task task: tasks) { 
     if(!work){break;} 
     Thread thread = new Thread(task); 
     thread.start(); 
     try { 
      thread.join(); 
     } catch (InterruptedException e) { 
      break; 
     } 
    } 
} 
... 
public void run() { 
    Thread.currentThread.interrupt(); 
    work=false; 
}