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

时间:2011-06-20 18:07:10

标签: java multithreading

我想要计算时间时遇到问题。 基本上问题是这样的:有一个类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循环中的所有东西都完成。你能帮我弄清楚如何实现这个目标吗?任何想法都将不胜感激。

1 个答案:

答案 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实现。