static volatile L<ThreadInfo> printDeadlocks_lastDeadlock;

static L<ThreadInfo> printDeadlocks() {
  ThreadMXBean bean = ManagementFactory.getThreadMXBean();
  long ids[] = bean.findDeadlockedThreads();
  if (empty(ids)) ret emptyList();
  
  printAsciiHeading(upper(n2(ids, "deadlocked thread")));
  ThreadInfo threadInfo[] = bean.getThreadInfo(ids);
  print("Got " + n2(threadInfo, "thread info"));
  S info = print(deadlockedThreadsToString(asList(threadInfo)));
  appendToFile(javaxDataDir("deadlocks.txt"), "\n\n" + localDateWithSeconds() + "\n\n" + info);
  ret printDeadlocks_lastDeadlock = asList(threadInfo);
}