static S deadlockedThreadsToString(L threadInfo) { new L out; int i = 0; Map map = threadInfosToThreads_map(threadInfo); for (ThreadInfo threadInfo1 : threadInfo) { out.add("Thread " + (++i) + "/" + l(threadInfo) + ": ID=" + threadInfo1.getThreadId() + ", name=" + quote(threadInfo1.getThreadName())); out.add(" Trying to lock: " + threadInfo1.getLockName() + " which is owned by thread " + threadInfo1.getLockOwnerId() + " (" + quote(threadInfo1.getLockOwnerName()) + ")"); // ThreadInfo.getStackTrace() doesn't work, so we look up the thread. Thread t = map.get(threadInfo1); if (t != null) { StackTraceElement[] st = t.getStackTrace(); out.add("Stack trace (" + l(st) + "): "); out.add(indentx(stackTraceToString(st))); } } ret lines(out); }