从main()访问另一个Java应用程序的线程

时间:2012-10-14 14:31:40

标签: java multithreading process executable-jar

我想从我自己的main()运行一个JAR文件。假设我有一个具有main()方法的A类。 A的main()方法将在另一个文件B.jar中运行新的main()方法。 这就是我从A.jar的main()方法运行B.jar文件的方法:here

问题在于我无法访问B.jar Java源代码。我需要知道的是B.jar main()方法中运行了多少个线程。

此处还有另一个关于获取在Java应用程序here中运行的所有线程列表的讨论。

现在我需要的是B.jar产生的线程列表。或者至少是一个线程ID数组。

3 个答案:

答案 0 :(得分:0)

方法Thread.activeCount()将为您提供当前ThreadGroup中的线程数。如果外部jar中的线程没有定义新的线程组,那么默认情况下运行时将把这些线程放在与调用线程(即你的线程)相同的组中。您可以在执行jar之前和之后调用此方法,并查看它的更改量。

更新 - 如果您还想知道新jar生成了哪些线程,请在前后使用Thread.enumerate,筛选两个阵列中的线程。其余的线程应该是jar文件中的类创建的。

答案 1 :(得分:0)

保持JAR root/parent进程的B主题。您可以随时使用此root/parentactiveCount()来计算B创建的主题。

答案 2 :(得分:0)

如果你按照你链接的引用在一个单独的进程中运行B.jar,它的线程就在那个进程中,而不是这个进程,你无权访问它们。如果由于某些(奇怪的)原因需要访问线程,则必须(找到并)直接在当前JVM中运行B.jar的main()方法。