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

Java 多线程-杀死一个线程及其所有子进程,java,multithreading,Java,Multithreading,我正在开发一个分析应用程序。在Java中。在顶部,我有一个GUI,它有开始和停止按钮。单击开始,我创建了一个线程,在其运行方法中我调用了一个API方法,该方法在内部创建了一个线程 单击“开始”-->会生成一个线程---->在这个线程的运行方法中,我使用一个API cal在内部创建一个线程 现在,我想要的是,当我单击StopGUI按钮时,由API调用创建的内部线程也应该死亡 我怎样才能做到这一点 谢谢您必须对线程类实现一些逻辑。首先,他们需要一些“杀戮开关”——你不能(不应该!!)从外面阻止他们。

我正在开发一个分析应用程序。在Java中。在顶部,我有一个GUI,它有开始和停止按钮。单击开始,我创建了一个线程,在其运行方法中我调用了一个API方法,该方法在内部创建了一个线程

单击“开始”-->会生成一个线程---->在这个线程的运行方法中,我使用一个API cal在内部创建一个线程

现在,我想要的是,当我单击StopGUI按钮时,由API调用创建的内部线程也应该死亡

我怎样才能做到这一点


谢谢

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

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

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;
   }
 }
公共抽象类MyThread扩展线程{
private List children=new ArrayList();

private boolean stopNow=false;//但我的问题是,我无法获取对该线程的引用,它是由API调用在内部生成的。该线程做什么,在API调用中传递什么?也许你可以将某些将“隐藏”内部线程更改为except/fail。你只需传递起始信息。一次,然后线程是自己创建的。我需要大量的信息。因此我需要在开始时传递合法的输入。根据Martin的评论-线程是否使用任何资源(db?文件?)你可以改变它使它失败,而不是你在开始时传递什么?线程使用来自世界各地的实时推文…关闭互联网连接不会有帮助,因为这样它会再次记录错误,说没有互联网连接,我不想…API提供了任何杀死/停止线程的方法吗?是的,我ot所有内部线程的一个显式线程关闭方法:)