我有一个线程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内部获取生成线程的引用。
答案 0 :(得分:2)
使用java.lang.ThreadGroup
。通过使用静态ThreadGroup构造ThreadC的所有实例,您可以使用ThreadGroup#activeCount()
维护ThreadC的所有实例并获取活动实例的计数。只需在ThreadA中添加一个条件,只有在调用activeCount()时public static ThreadC.threadGroup
字段返回0时才调用performAction()。