From 7bee2e032dd8778bd6f8d899e9fa1d1d5e0fe4be Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Mon, 1 Oct 2012 10:20:12 +0000
Subject: [PATCH] SP-320: Helper class ThreadDump added.

SVN: 26864
---
 .../cisd/common/utilities/ThreadDump.java     | 64 +++++++++++++++++++
 1 file changed, 64 insertions(+)
 create mode 100644 common/source/java/ch/systemsx/cisd/common/utilities/ThreadDump.java

diff --git a/common/source/java/ch/systemsx/cisd/common/utilities/ThreadDump.java b/common/source/java/ch/systemsx/cisd/common/utilities/ThreadDump.java
new file mode 100644
index 00000000000..ee7035ddef3
--- /dev/null
+++ b/common/source/java/ch/systemsx/cisd/common/utilities/ThreadDump.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2012 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.common.utilities;
+
+import java.io.PrintWriter;
+import java.lang.Thread.State;
+import java.util.Collection;
+import java.util.Map;
+import java.util.Map.Entry;
+
+/**
+ * Helper class which dumps all threads onto the console or a {@link PrintWriter}.
+ *
+ * @author Franz-Josef Elmer
+ */
+public class ThreadDump
+{
+    /**
+     * Dumps all threads onto System.out.
+     */
+    public static void dumpAllThreads()
+    {
+        PrintWriter writer = new PrintWriter(System.out);
+        dumpAllThreads(writer);
+        writer.flush();
+    }
+    
+    /**
+     * Dumps all threads onto the specified writer.
+     */
+    public static void dumpAllThreads(PrintWriter writer)
+    {
+        Map<Thread, StackTraceElement[]> allStackTraces = Thread.getAllStackTraces();
+        Collection<Entry<Thread, StackTraceElement[]>> allDumps = allStackTraces.entrySet();
+        for (Entry<Thread, StackTraceElement[]> entry : allDumps)
+        {
+            Thread thread = entry.getKey();
+            State state = thread.getState();
+            writer.println(thread + " state: " + State.valueOf(state.name()) + " daemon: "
+                    + thread.isDaemon() + " alive: " + thread.isAlive() + " interrupted: "
+                    + thread.isInterrupted());
+            StackTraceElement[] stackTraceElements = entry.getValue();
+            for (StackTraceElement stackTraceElement : stackTraceElements)
+            {
+                writer.println("\tat " + stackTraceElement);
+            }
+            writer.println();
+        }
+    }
+}
-- 
GitLab