Wenn Sie eine Anwendung und müssen nicht über Security Einschränkungen Sorge, und wenn Sie bereit sind, gelegentlich Ihren Code zu ändern, wenn der Code von Drittanbietern aktualisiert wird, können Sie die Einrichtungen von ThreadGroup
, um die Threads zu durchlaufen und sie anhand des Namens oder der Threadgruppe zu identifizieren, die sie enthält.
Sobald Sie die Threads gefunden haben, ist es eine einfache Aufgabe, sie entweder zu überwachen, bis sie fertig sind, oder Thread.join()
entsprechend zu verwenden.
Als Beispiel hier einige Arbeitscode, der alle Fäden in der JVM-Dumps:
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(" --");
}
Sie brauchen eine Art Referenz, auf die Sie warten müssen. Wie ein Thread, eine Zukunft oder die Möglichkeit, einen Rückruf zu installieren. Wenn die Bibliothek das nicht anzeigt, wird es schwer ... Vielleicht etwas, das Sie alle X Sekunden abfragen können? – Thilo
Ich könnte es abfragen, aber woher weiß ich, dass sie fertig sind? Kann ich die nach mir erzeugten Threads "ausspionieren"? – bsferreira
Ich meine Umfrage, bis Sie etwas sehen, das Ihnen sagt, dass diese Threads getan haben, was sie tun müssen. Sind Sie sicher, dass die Bibliothek keine Unterstützung für irgendeine Art von Benachrichtigung bietet? Sie können bessere Antworten erhalten, wenn Sie uns sagen können, welche Bibliothek das ist. – Thilo