多线程 - 杀死一个线程及其所有子进程

时间:2012-03-22 08:40:51

标签: java multithreading

我正在开发一款分析应用。在Java中。顶部我有一个具有START和STOP Buttons的GUI.On单击Start我创建一个Thread,其内部的RUN方法我调用一个API方法,在内部创建一个Thread.i.e。

单击“开始”----->生成线程---->在此线程的RUN方法中,我使用API​​ cal在内部创建线程...

现在,我想要的是当我点击STOP GUI按钮时,API调用创建的内部线程也应该死...

我怎样才能实现?

由于

1 个答案:

答案 0 :(得分:2)

您必须为线程类实现一些逻辑。首先,他们需要一些“杀戮开关” - 你不能(不应该!!)从外面阻止它们。我们通常在线程实例上定义并设置一个标志,以便它知道何时必须终止。

然后,我们没有线程“层次结构”。线程实例将需要其自己的子线程列表,如果它(父)接收到停止信号,它将必须向其子节点发送相同的信号。

public abstract class MyThread extends Thread {

   private List<MyThread> children = new ArrayList<MyThread>();
   private boolean stopNow = false;  // <- this is the stop flag

   public void stopNow() {
     for (MyThread thread:children) {
       thread.stopNow();
     }
     stopNow = true;
   }
 }

(这不会使线程实际停止,我们必须“监视”stopNow方法中的run标志。