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

4
我正在开发一个框架,允许客户使用Java编写自己的代码。该框架在一个线程(例如线程A)中调用他们的代码以执行定制操作。
但是客户可能会在他们的代码中创建新线程。因此问题是如何知道所有客户代码的线程何时完成?或者如何禁止客户在他们的代码中创建线程?
谢谢。

1
让客户端代码创建线程在我看来会引起一些混乱。他们为什么需要线程?为了性能?好吧,在这种情况下,性能考虑应该由基础框架处理,它应该知道如何处理耗时的请求。有很多框架允许客户编写自定义脚本,但我认为它是在受控环境中完成的(即客户端不能通过调用System.exit(1)等来关闭JVM)。我认为RMI提供了类似的功能,客户端可以提交自定义请求。RMI是否符合您的要求? - Sanjay T. Sharma
1个回答

1

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

如果您想禁止创建新线程,我认为您可以通过自定义SecurityManager来实现,但我不知道详细信息。


但是框架如何知道客户端创建的线程数量呢?也许框架可以提供一个创建线程的方法,该方法以可运行对象作为参数,并在启动线程时计数。 - titogeo
@TitoGeorge,您想知道创建的线程总数,包括已完成运行的线程吗?我怀疑除非框架的用户合作,否则这是不可能的。 - Joni
我同意。就像SwingUtilities.invokeLater(Runnable doRun)一样,框架应该提供一个类似的方法。但是,只有当框架的用户理解使用它的重要性时,它才会有用。 - titogeo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接