public static void killAWTThreads(ThreadGroup threadGroup) { Thread[] threadList = new Thread[threadGroup.activeCount()]; threadGroup.enumerate(threadList); for (int i = 0; i < threadList.length; i++) { Thread t = threadList[i]; if (t != null) { String name = t.getName(); if (name.startsWith("AWT")) { out("Interrupting thread '".concat(t.toString()).concat("'")); t.interrupt(); } } } if (threadGroup.getParent() != null) { killAWTThreads(threadGroup.getParent()); } }
public static void dumpThreads(ThreadGroup threadGroup, String indent) { Thread[] threadList = new Thread[threadGroup.activeCount()]; threadGroup.enumerate(threadList); for (int i = 0; i < threadList.length; i++) { Thread t = threadList[i]; if (t != null) { out( indent .concat("active thread = ") .concat(t.toString()) .concat(", daemon = ") .concat(String.valueOf(t.isDaemon()))); } } if (threadGroup.getParent() != null) { dumpThreads(threadGroup.getParent(), indent + "\t"); } }
private static void runExecutionBoundedTest(int nthreads, List<Counter> counters, int nexecutions) throws InterruptedException { final List<CounterThread> threads = new ArrayList<CounterThread>(); for (int i = 0; i < nthreads; i++) { CounterThread t; t = new CounterThread(counters.get(i % counters.size()), nexecutions); t.start(); threads.add(t); } CounterThread.shoot(); // let all the threads go crazy at the same time for (int i = 0; i < nthreads; i++) { CounterThread t = threads.get(i); t.join(30000); if (t.isAlive()) { System.out.println("stuck thread name: " + t.toString()); System.out.println("stuck thread state: " + t.getState()); safe.ReentrantLock l = (safe.ReentrantLock) t.getLock(); System.out.println("thread waiting lock: " + l); System.out.println("stuck thread increments: " + t.getExecutions()); System.out.println("stuck thread counter value: " + t.getCounterCount()); Thread other = l.getOwner(); System.out.println("lock owner: " + other); if (other != null) { System.out.println("owner name: " + other.toString()); System.out.println("state owner: " + other.getState()); } // Keep program alive to dump thread stacks with: jstack -l $(pidof java) System.out.println( java.lang.management.ManagementFactory.getThreadMXBean().getPeakThreadCount()); while (true) {} } } long sum = 0; for (int i = 0; i < counters.size(); ++i) { sum += counters.get(i).getCount(); } System.out.println(sum); System.out.println( java.lang.management.ManagementFactory.getThreadMXBean().getPeakThreadCount()); }
private String currentThread(Thread t_) { if (t_ == null) t_ = Thread.currentThread(); return t_.toString(); }