2012-03-22 132 views
2

我正在开发一个分析应用程序。在Java.At顶部我有一个图形用户界面有START和STOP Buttons.On点击开始我创建一个线程内的RUN方法,我称之为内部创建一个Thread.i.e的API方法。多线程 - 杀死线程及其所有子进程

在单击“开始” ----->线程是催生---->在该线程的run方法我用它创建内部线程的CAL API ...

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

我怎么能实现?

谢谢

+1

API是否提供了任何杀死/停止线程的方法? – 2012-03-22 08:52:37

+0

Naah,我不这么认为... – nikel 2012-03-22 08:59:12

+0

是的,我得到了一个显式线程关闭方法,所有内部线程:) – nikel 2012-03-22 15:35:50

回答

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; 
    } 
} 

(这不会让一个线程真正停止,我们将不得不在run法“监视”的stopNow标志)。

+0

但我的问题是,我无法获得对该线程的引用,它是内部生成的通过API调用。 – nikel 2012-03-22 08:47:32

+0

那真的是一个问题。 – 2012-03-22 08:59:05

+0

线程做了什么,在API调用中传递了什么?也许你可以改变一些会隐藏'隐藏'的内部线程以除去/失败的内容。 – 2012-03-22 09:04:46