微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java – 等待第三方线程完成

我有一个运行第三方库的线程,它也将运行自己的线程.当我的线程的run方法完成时,第三方线程将不会完成.

那么,在这些外部线程仍在运行之前,保持我的线程的最佳方法是什么?

解决方法

如果您是一个应用程序而不必担心SecurityManager限制,并且如果您准备在更新第三方代码时偶尔修改代码,则可以使用ThreadGroup的工具来遍历线程并通过以下方式识别它们:名称或包含它们的线程组.

一旦找到了线程,就可以在它们完成之前监视它们,或者在适当的时候使用Thread.join().

举个例子,这里有一些工作代码转储JVM中的所有线程:

public void printThreads(PrintWriter wtr) {
    ThreadGroup     root;

    totGroups=0;
    totthreads=0;

    for(root=Thread.currentThread().getThreadGroup(); root.getParent()!=null; root=root.getParent()) {}
    wtr.println("Thread Dump:");
    printThreadGroup(wtr,root,"  ");
    wtr.println("  -- Total Groups: "+totGroups+",Total Threads: "+totthreads);
    }

public void printThreadGroup(PrintWriter wtr,ThreadGroup grp,String pfx) {
    try {
        Thread[]        thds;
        ThreadGroup[]   grps;

        totGroups++;
        wtr.println(pfx+"Group: "+grp.getName()+","+(grp.isDaemon()?"Daemon":"normal")+","+(grp.isDestroyed()?"Destroyed":"Alive")+","+grp.getMaxPriority());
        thds=new Thread[grp.activeCount()];
        grp.enumerate(thds,false);
        Arrays.sort(thds,THREAD_SORTER);
        for(int xa=0; xa<thds.length && thds[xa]!=null; xa++,totthreads++) {
            Thread          thd=thds[xa];
            wtr.println(pfx+". - ["+thd.getName()+","+(thd.isDaemon()?"Daemon":"normal")+","+(thd.isAlive()?"Alive":"Not Started or Dead")+","+thd.getPriority()+"]");
            }

        grps=new ThreadGroup[grp.activeGroupCount()];
        grp.enumerate(grps,false);
        Arrays.sort(grps,GROUP_SORTER);
        for(int xa=0; xa<grps.length && grps[xa]!=null; xa++) {
            printThreadGroup(wtr,grps[xa],(pfx+". "));
            grps[xa]=null;
            }
        }
    catch(Throwable thr) {
        wtr.println("  Cannot print threads ("+thr+")");
        }
    }

public void printStacks(PrintWriter wtr) {
    wtr.println("Thread Stack Traces:");
    try { javaMx.printStacks(wtr); } catch(Throwable thr) { wtr.println("  Cannot print stacks ("+thr+")"); }
    wtr.println("  --");
    }

原文地址:https://www.jb51.cc/java/240021.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐