Nếu bạn là một ứng dụng và không cần phải lo lắng về việc hạn chế SecurityManager, và nếu bạn đang chuẩn bị để thỉnh thoảng thay đổi mã của bạn khi mã của bên thứ ba được cập nhật, bạn có thể sử dụng các cơ sở của ThreadGroup
để đi bộ các chủ đề và xác định chúng theo tên hoặc theo nhóm chủ đề có chứa chúng.
Khi bạn đã xác định được các chủ đề đó là một công việc đơn giản để theo dõi chúng cho đến khi chúng được thực hiện hoặc sử dụng Thread.join()
khi thích hợp.
Như một ví dụ, đây là một số mã làm việc mà bãi tất cả các chủ đề trong 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(" --");
}
Nguồn
2014-12-17 01:23:11
Bạn cần một số tham chiếu để chờ. Chẳng hạn như Chủ đề, Tương lai hoặc khả năng cài đặt gọi lại. Nếu thư viện không vạch trần điều đó, nó sẽ rất khó ... Có lẽ bạn có thể thăm dò ý kiến mỗi giây X? – Thilo
Tôi có thể thăm dò ý kiến, nhưng làm sao tôi biết họ đã kết thúc? Tôi có thể "gián điệp" các chủ đề được tạo ra sau của tôi không? – bsferreira
Tôi có nghĩa là cuộc thăm dò cho đến khi bạn thấy một cái gì đó cho bạn biết rằng những chủ đề này đã làm bất cứ điều gì họ cần làm. Bạn có chắc chắn thư viện không cung cấp hỗ trợ cho một số loại thông báo không? Bạn có thể nhận được câu trả lời tốt hơn nếu bạn có thể cho chúng tôi biết thư viện này là gì. – Thilo