Approach 1: Using Thread.getAllStackTraces() method.
Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
Approach 2: Using enumerate method of root thread group.
Approach looks like below.
a. Get the thread group of currently running thread.
b. Get root thread group by traversing reverse
c. Call enumerate method on root thread group to get all the active threads.
public static List<Thread> getCurrentlyRunningThreads_approach2() {
// Get root thread group
ThreadGroup currentThreadGroup = Thread.currentThread().getThreadGroup();
ThreadGroup parentThreadGroup;
while ((parentThreadGroup = currentThreadGroup.getParent()) != null) {
currentThreadGroup = parentThreadGroup;
}
int activeThreadsCount = currentThreadGroup.activeCount();
Thread[] activeThreads = new Thread[activeThreadsCount * 2];
currentThreadGroup.enumerate(activeThreads, true);
return Arrays.asList(activeThreads);
}
App.java
package com.sample.app;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
public class App {
public static List<Thread> getCurrentlyRunningThreads_approach1() {
Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
return new ArrayList<>(threadSet);
}
public static List<Thread> getCurrentlyRunningThreads_approach2() {
// Get root thread group
ThreadGroup currentThreadGroup = Thread.currentThread().getThreadGroup();
ThreadGroup parentThreadGroup;
while ((parentThreadGroup = currentThreadGroup.getParent()) != null) {
currentThreadGroup = parentThreadGroup;
}
int activeThreadsCount = currentThreadGroup.activeCount();
Thread[] activeThreads = new Thread[activeThreadsCount * 2];
currentThreadGroup.enumerate(activeThreads, true);
return Arrays.asList(activeThreads);
}
public static void main(String args[]) {
List<Thread> threads = getCurrentlyRunningThreads_approach1();
threads.stream().forEach(thread -> {
if (thread != null)
System.out.println(thread.getName());
});
System.out.println("\n");
threads = getCurrentlyRunningThreads_approach2();
threads.stream().forEach(thread -> {
if (thread != null)
System.out.println(thread.getName());
});
}
}
Output
Signal Dispatcher
main
Finalizer
Reference Handler
Reference Handler
Finalizer
Signal Dispatcher
main
You may
like
No comments:
Post a Comment