等待子线程完成,没有对线程的引用

时间:2014-10-26 06:15:31

标签: java multithreading concurrency semaphore monitors

我正在为已经存在的应用程序构建API,有时会使用线程。所以我的方法就像这样

private SSG theSSG;
...
private void doSomething(){
  theSSG.loadMenu();

//my code
}

现在,loadMenu方法可以产生一个线程,但不一定。如果是,doSomething将执行其余代码,而新线程正在执行其他代码。我需要的是一种等待loadMenu()完成执行所有子线程的方法,然后才能感知到下一行代码。我没有可能运行的线程的引用,因为这是基于用户的选择,所以我不能使用join()。我也无法编辑应用程序(或loadMenu中发生的事情)。

1 个答案:

答案 0 :(得分:2)

除非您引用Thread对象 1 ,否则无法判断线程是否已完成。

可以(理论上)遍历JVM中的所有现有Thread对象,并尝试识别可能与任务相关联的线程(按名称)。但是我不知道如何在没有帮助的情况下可靠地区分线程,而不知道它们是什么。如果你能得到那种帮助,那么要求孩子参考是一小步。

您最好的选择是重新设计此部分应用程序。要么改变一些东西,以便框架知道(或可以找出)子线程是什么,或者它可以委托"等待线程完成"能够实现它的功能。


1 - 这有一个(无用的)例外。你总能找到"这个帖子"致电Thread.currentThread()。但是,保证当前线程仍然存在。如果你(错误地)试图让一个线程到join()本身,就会发生坏事;例如线程会死锁。