从外部产卵线程中检测另一个线程的实例

时间:2012-05-10 23:18:56

标签: java multithreading

我有一个线程A,它在while(running)循环内执行定期操作。然后我有另一个线程B,它监听用户输入。当用户按下按钮时,线程B产生一个新线程来执行任务(让我们称之为线程C的一个实例)。此任务涉及通过互联网发送信息,最多可能需要20秒。可以同时激活多个C个实例。

我遇到的问题是这个。我希望线程A只运行它的代码,如果没有“C”类型的线程当前处于活动状态。更清楚的是,线程A看起来像这样:

 class ThreadA extends Thread{

      public void run(){
            while(running){
                performAction();
                Thread.sleep(1000);
            }
      }
 }

如果检测到C的实例,那么显然我不希望调用performAction()。如果线程当前正在执行performAction(),那么我想在其当前进度停止执行。

我不知道如何继续,因为我不确定如何从线程A内部获取生成线程的引用。

1 个答案:

答案 0 :(得分:2)

使用java.lang.ThreadGroup。通过使用静态ThreadGroup构造ThreadC的所有实例,您可以使用ThreadGroup#activeCount()维护ThreadC的所有实例并获取活动实例的计数。只需在ThreadA中添加一个条件,只有在调用activeCount()时public static ThreadC.threadGroup字段返回0时才调用performAction()。