gpt4 book ai didi

java - 如何访问另一个类中定义的线程?

转载 作者:太空宇宙 更新时间:2023-11-04 08:36:01 27 4
gpt4 key购买 nike

当我想要计算时间时遇到了问题。基本上问题是这样的:有一个类A,它本身启动了一个私有(private)线程,我在类B中有一个A的实例,在B的main方法中我调用了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 循环中的所有内容完成。你能帮我弄清楚如何实现这一目标吗?任何想法将不胜感激。

最佳答案

列出所有主题及其组

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 中的一个或多个。实现。

关于java - 如何访问另一个类中定义的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6415492/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com