1
19
20 package com.liferay.portal.events;
21
22 import com.liferay.portal.kernel.util.GetterUtil;
23
24 import java.util.Map;
25
26
32 public class ShutdownHook implements Runnable {
33
34 public void run() {
35 if (GetterUtil.getBoolean(
36 System.getProperty("shutdown.hook.print.full.thread.dump"))) {
37
38 printFullThreadDump();
39 }
40 }
41
42 protected void printFullThreadDump() {
43 StringBuilder sb = new StringBuilder();
44
45 sb.append("Full thread dump ");
46 sb.append(System.getProperty("java.vm.name"));
47 sb.append(" ");
48 sb.append(System.getProperty("java.vm.version"));
49 sb.append("\n\n");
50
51 Map<Thread, StackTraceElement[]> stackTraces =
52 Thread.getAllStackTraces();
53
54 for (Thread thread : stackTraces.keySet()) {
55 StackTraceElement[] elements = stackTraces.get(thread);
56
57 sb.append("\"");
58 sb.append(thread.getName());
59 sb.append("\"");
60
61 if (thread.getThreadGroup() != null) {
62 sb.append(" (");
63 sb.append(thread.getThreadGroup().getName());
64 sb.append(")");
65 }
66
67 sb.append(", priority=");
68 sb.append(thread.getPriority());
69 sb.append(", id=");
70 sb.append(thread.getId());
71 sb.append(", state=");
72 sb.append(thread.getState());
73 sb.append("\n");
74
75 for (int i = 0; i < elements.length; i++) {
76 sb.append("\t");
77 sb.append(elements[i]);
78 sb.append("\n");
79 }
80
81 sb.append("\n");
82 }
83
84 System.out.println(sb);
85 }
86
87 }