6

Ich verwende einen ThreadPoolTaskExecutor im Frühling, um meine Aufgaben zu planen.Listet alle laufenden/wartenden Threads in ThreadPoolTaskExecutor auf

Gibt es eine Möglichkeit, eine Liste oder etwas von jedem laufenden und wartenden Thread des Tasks Executor/Pool zu erhalten?

+0

Was wollen Sie erreichen? 'getActiveCount()' gibt die Anzahl der aktuell aktiven Threads zurück. 'getPoolSize()' gibt die Anzahl der Threads im Pool zurück. Was brauchst du mehr? Und warum? –

+1

'ThreadPoolTaskExecutor # .getThreadPoolExecutor(). GetQueue()' states _Gibt die von diesem Executor verwendete Taskwarteschlange zurück. Der Zugriff auf die Task-Warteschlange ist hauptsächlich zum Debuggen und Überwachen vorgesehen. Diese Warteschlange kann aktiv verwendet werden. Das Abrufen der Aufgabenwarteschlange verhindert nicht die Ausführung von Aufgaben in der Warteschlange._ –

+1

@JBNizet Ich möchte wissen, was in meiner Anwendung los ist;) –

Antwort

2

Vielleicht nicht sehr elegant, aber auf diese Weise kann ich alle Threads von einem bekannten Executor (mit dem Präfix) bekommen.

Set<Thread> threadSet = Thread.getAllStackTraces().keySet(); 
for (Thread thread : threadSet) { 
    if (thread.getName().startsWith("MyExecutor")) { 
    System.out.println(thread.getName() + " " + thread.getState()); 
    for (StackTraceElement s : thread.getStackTrace()) { 
     System.out.println(s); 
    } 
    } 
} 

Dank Surveon für seine Andeutung, upvoted ich für seine approch die Warteschlange Fäden zu erhalten.

0

Ein möglicher Weg ist Reflexion oder Feder ReflectionUtils oder ReflectionTestUtils zu verwenden ..

Ich benutzen ReflectionTestUtils in meinem Junit das Szenario zu testen, wenn ein oder mehr Schlaf Fäden unterbrochen wird.

Der Code-Snippet ist:

Collection<Object> workers = (Collection<Object>) ReflectionTestUtils.getField(responseHandlerTaskExecutor.getThreadPoolExecutor(), "workers"); 

for(Object worker : workers){ 
    Thread workerThread = (Thread)ReflectionTestUtils.getField(worker, "thread"); 
    workerThread.interrupt(); 
} 
Verwandte Themen