我正在为一个已经存在的应用程序构建一个 API,该应用程序有时使用线程。所以我的方法之一是这样的
private SSG theSSG;
...
private void doSomething(){
theSSG.loadMenu();
//my code
}
现在,loadMenu
方法可以生成一个线程,但不一定。如果是这样,doSomething
将执行其余代码,而新线程正在执行其他代码。我需要的是一种方法来等待 loadMenu() 完成执行其所有子线程,然后再继续执行下一行代码。我没有可能运行的线程的引用,因为那是基于用户的选择,所以我不能使用join()
。我也无法编辑应用程序(或者 loadMenu
中发生的情况)。
最佳答案
除非您拥有对 Thread 对象的引用1,否则无法判断线程是否已完成。
(理论上)可以搜索 JVM 中所有现有的 Thread 对象,并尝试识别可能与任务关联的线程(按名称)。但我不知道如何在没有理解线程的帮助的情况下可靠地区分线程。如果您可以获得此类帮助,那么询问 child 的推荐信只是一小步。
您最好的选择是重新设计应用程序的这一部分。要么改变一些东西,以便框架知道(或可以找出)子线程是什么,要么让它可以将“等待线程完成”功能委托(delegate)给可以实现它的东西。
<小时/>1 - 对此有一个(无用的)异常(exception)。您始终可以通过调用 Thread.currentThread() 来找到“此线程”。但是,当前线程保证仍然存活。如果你(错误地)尝试让一个线程加入join()
本身,就会发生不好的事情;例如线程将死锁。
关于java - 等待子线程完成,而不引用该线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26570338/