如何在Java中从一个线程获取所有子线程?

如何在Java中从一个线程获取所有子线程?,java,multithreading,Java,Multithreading,我正在开发一个框架,允许客户用java编写自己的代码。这个框架在一个线程(比如线程a)中调用他们的代码来做定制的事情 但客户可能会在代码中创建新线程。所以问题是如何知道所有客户代码的线程完成了?或者如何禁止客户在代码中创建线程 谢谢。您可以为客户端代码创建一个新的。activeCount方法告诉您在给定时刻有多少客户端线程处于活动状态,而enumerate方法允许您枚举线程。要等待整个组的终止,您可以枚举线程并对每个线程调用join 如果您想禁止创建新线程,我相信您可以使用自定义的Securit

我正在开发一个框架,允许客户用java编写自己的代码。这个框架在一个线程(比如线程a)中调用他们的代码来做定制的事情

但客户可能会在代码中创建新线程。所以问题是如何知道所有客户代码的线程完成了?或者如何禁止客户在代码中创建线程

谢谢。

您可以为客户端代码创建一个新的。
activeCount
方法告诉您在给定时刻有多少客户端线程处于活动状态,而
enumerate
方法允许您枚举线程。要等待整个组的终止,您可以枚举线程并对每个线程调用
join


如果您想禁止创建新线程,我相信您可以使用自定义的
SecurityManager
来实现,但我不知道细节

允许客户端代码创建线程对我来说是一场浩劫。为什么他们需要线程呢?演出那么,在这种情况下,您的基础框架应该考虑性能问题,它应该知道如何处理耗时的请求。有很多框架允许客户端编写自定义脚本,但我认为这是在受控环境中完成的(即客户端不能通过调用
System.exit(1)
等来关闭JVM)。我认为RMI提供了类似的功能,客户可以提交定制请求。RMI符合您的要求吗?但框架如何知道客户创建的线程数?可能是框架可以提供一个方法来创建线程,一个方法将runnable作为参数,并在启动线程时保持计数。@TitoOrge您想知道创建的线程总数,包括已完成运行的线程吗?除非框架的用户合作,否则我怀疑这是可能的。我同意。invokeLater(Runnable doRun)框架应该提供一个。但只有当框架的用户理解使用它的重要性时,它才有用。