java - thread - public void run() android studio
Obtener referencia a Thread Object desde su ID (2)
Puede usar el siguiente código para obtener el nombre del hilo (por ejemplo, quiero obtener nombres de hilos que están en un punto muerto)
ThreadMXBean threadMB = ManagementFactory.getThreadMXBean();
long threadIds[] = threadMB.findDeadlockedThreads();
for (long id : threadIds) {
System.out.println("The deadLock Thread id is : " + id
+ " > "
+
threadMB.getThreadInfo(id).getThreadName());
}
¿Cómo puedo obtener una referencia a un subproceso en ejecución si conozco la ID asociada con ese subproceso?
p.ej
long threadID = 12342;
Thread thread = (What goes here?) getThreadFromId(threadID); //I know this is totally made up
Tienes 2 formas de hacerlo. Ambos son bastante simples:
Thread.currentThread().getGroup()
antigua: obtenga el grupo de subprocesos raíz a los que puede accederThread.currentThread().getGroup()
..getParent () en bucle. y llamar aenumerate(Thread[])
más nuevo (aunque más lento).
for (Thread t : Thread.getAllStackTraces().keySet()) if (t.getId()==id)...
El primer método tiene un pequeño problema que debido a un error en ThreadGroup.destroy()
, un ThreadGroup puede no enumerar nada en absoluto.
Sin embargo, el segundo es más lento y tiene una falla de seguridad.