update thread studio run from example java android multithreading

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 acceder Thread.currentThread().getGroup() ..getParent () en bucle. y llamar a enumerate(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.