aboutsummaryrefslogtreecommitdiffstats
path: root/vespajlib/src/main/java/com/yahoo/concurrent/Threads.java
diff options
context:
space:
mode:
Diffstat (limited to 'vespajlib/src/main/java/com/yahoo/concurrent/Threads.java')
-rw-r--r--vespajlib/src/main/java/com/yahoo/concurrent/Threads.java30
1 files changed, 30 insertions, 0 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/concurrent/Threads.java b/vespajlib/src/main/java/com/yahoo/concurrent/Threads.java
new file mode 100644
index 00000000000..d30750692e9
--- /dev/null
+++ b/vespajlib/src/main/java/com/yahoo/concurrent/Threads.java
@@ -0,0 +1,30 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.concurrent;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @author bjorncs
+ */
+public class Threads {
+
+ private Threads() {}
+
+ /** Returns all threads in JVM */
+ public static Collection<Thread> getAllThreads() {
+ ThreadGroup root = Thread.currentThread().getThreadGroup();
+ ThreadGroup parent;
+ while ((parent = root.getParent()) != null) {
+ root = parent;
+ }
+ // The number of threads may increase between activeCount() and enumerate()
+ Thread[] threads = new Thread[root.activeCount() + 100];
+ int count;
+ while ((count = root.enumerate(threads, true)) == threads.length) {
+ threads = new Thread[threads.length + 1000];
+ }
+ return List.of(Arrays.copyOf(threads, count));
+ }
+}