我想要计算时间时遇到问题。 基本上问题是这样的:有一个类A,它本身启动一个私有线程,我在我的B类中有一个A的瞬间,并且在BI的主要方法中调用了一些A的方法,并且想要测试是时候运行这些方法。
A a = new A();
//start time counter
for (int i = 0; i < 10; i++){ invoke a.method() that takes some time}
//end time counter and prints the time elapsed
但是通过这样做,for循环中的方法将在A中的单独线程中运行,而最后一行中的prints方法可能会在循环结束之前执行。所以我想在a中访问thead并调用join()来等待for循环中的所有东西都完成。你能帮我弄清楚如何实现这个目标吗?任何想法都将不胜感激。
答案 0 :(得分:1)
列出所有主题及其组
public class Main
{
public static void visit(final ThreadGroup group, final int level)
{
final Thread[] threads = new Thread[group.activeCount() * 2];
final int numThreads = group.enumerate(threads, false);
for (int i = 0; i < numThreads; i++)
{
Thread thread = threads[i];
System.out.format("%s:%s\n", group.getName(), thread.getName());
}
final ThreadGroup[] groups = new ThreadGroup[group.activeGroupCount() * 2];
final int numGroups = group.enumerate(groups, false);
for (int i = 0; i < numGroups; i++)
{
visit(groups[i], level + 1);
}
}
public static void main(final String[] args)
{
ThreadGroup root = Thread.currentThread().getThreadGroup().getParent();
while (root.getParent() != null)
{
root = root.getParent();
}
visit(root, 0);
}
}
根据您的编辑,您可以找出该主题所属的组和名称,并以此方式获取对该主题的引用并执行您需要执行的操作。
对于您未来的代码
您想查看ExecutorCompletionService以及java.util.concurrent中的其他线程管理工具。你不应该再用Java手动管理线程了,你可以想象的每个案例都可以处理一个或多个ExecutorService实现。