我正在为已经存在的应用程序构建API,有时会使用线程。所以我的方法就像这样
private SSG theSSG;
...
private void doSomething(){
theSSG.loadMenu();
//my code
}
现在,loadMenu
方法可以产生一个线程,但不一定。如果是,doSomething
将执行其余代码,而新线程正在执行其他代码。我需要的是一种等待loadMenu()
完成执行所有子线程的方法,然后才能感知到下一行代码。我没有可能运行的线程的引用,因为这是基于用户的选择,所以我不能使用join()
。我也无法编辑应用程序(或loadMenu
中发生的事情)。
答案 0 :(得分:2)
除非您引用Thread对象 1 ,否则无法判断线程是否已完成。
可以(理论上)遍历JVM中的所有现有Thread对象,并尝试识别可能与任务相关联的线程(按名称)。但是我不知道如何在没有帮助的情况下可靠地区分线程,而不知道它们是什么。如果你能得到那种帮助,那么要求孩子参考是一小步。
您最好的选择是重新设计此部分应用程序。要么改变一些东西,以便框架知道(或可以找出)子线程是什么,或者它可以委托"等待线程完成"能够实现它的功能。
1 - 这有一个(无用的)例外。你总能找到"这个帖子"致电Thread.currentThread()
。但是,保证当前线程仍然存在。如果你(错误地)试图让一个线程到join()
本身,就会发生坏事;例如线程会死锁。