- Использование Thread.getAllStackTraces () < /code> Чтобы получить трассу стека всех потоков, итерации по каждой теме и получить количество каждого состояния.Использование ThreadMxbean из ManagementFactory и получить счет каждого, как ниже -
Код: Выделить всё
fun emitThreadStateMetrics() { val threadStates = Thread.getAllStackTraces().keys.groupBy { it.state } threadStates.forEach { (state, threads) -> // keep track of count } }
Код: Выделить всё
fun emitThreadStateMetrics() {
val threadMxBean: ThreadMXBean = ManagementFactory.getThreadMXBean()
val threadIds = threadMxBean.allThreadIds
val threadInfos: Array = threadMxBean.getThreadInfo(threadIds)
var active = 0
var blocked = 0
var waiting = 0
var timedWaiting = 0
for (threadInfo in threadInfos) {
when (threadInfo.threadState) {
Thread.State.RUNNABLE -> active++
Thread.State.BLOCKED -> blocked++
Thread.State.WAITING -> waiting++
Thread.State.TIMED_WAITING -> timedWaiting++
else -> {}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... n-your-jvm