1

我有一个线程,它在循环A内执行周期性动作。while(running)然后我有另一个线程,B,它侦听用户输入。当用户按下按钮时,线程B会生成一个新线程来执行任务(我们称其为 Thread 的实例C)。此任务涉及通过 Internet 发送信息,最多可能需要 20 秒。一次可以有多个Cactive 实例。

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

 class ThreadA extends Thread{

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

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

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

4

1 回答 1

2

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

于 2012-05-10T23:26:11.060 回答