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

标签 java multithreading

当我想要计算时间时遇到了问题。 基本上问题是这样的:有一个类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/

相关文章:

java - android在异步任务中更新自定义 View

java - 在 TreeMap、HashMap 或 LinkedHashMap 中存储具有重复键的值

java - 使用回调函数在线程中注册事件

java - 如何以固定时间间隔调用方法(无线程)

java - Bukkit 事件多次触发

c - 如何 "multithread"C代码

c# - C# BlockingCollection 的 TryTakeFromAny 是否保证顺序检查 BlockingCollection 对象?

java - Java 中的 CountDownLatch 需要额外的同步吗?

c++ - 在 C++ 中使用 WinApi 进行多线程

java - gradle 子项目依赖版本在根项目中被覆盖