¿Cómo saber la condición en la que un hilo es la "espera" para?

CuriousMind:

Estoy depurando un entorno real y he tomado algunos desemboca hilo. Veo que muchos de hilo están "esperando la condición"; pero ¿cómo puedo saber lo que es la condición?

El siguiente es el fragmento de la pila de volcado de hilo real:

"Uploader-pool-job-create-ca2d264a-51b3-4fa3-8113- 
f0f0aca47add-StreamThread-10-0_14" #140 daemon prio=5 os_prio=0 
tid=0x00007f006002b800 nid=0x18b waiting on condition 
[0x00007f004d9e1000]
 java.lang.Thread.State: TIMED_WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x00000002c20d4320> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

Otro:

"Uploader-pool-job-create-ca2d264a-51b3-4fa3-8113- 
f0f0aca47add-StreamThread-3-0_16" #138 daemon prio=5 os_prio=0 
tid=0x00000000025da000 nid=0x189 waiting on condition 
[0x00007f004dbe3000]
java.lang.Thread.State: TIMED_WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <0x00000002c20d6690> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

En estos hilos que está diciendo "espera en condición"; pero no puedo descifrar lo que es esa condición en la que el hilo está esperando?

-> En general, ¿existen directrices de cómo entender los vertederos de rosca.

rustyx:

Es todo lo que hay en el seguimiento de la pila - ScheduledThreadPoolExecutorestá a la espera de la availablecondición:

private final Condition available;
. . .

     available.awaitNanos(delay);   // ScheduledThreadPoolExecutor.java:1093

En otras palabras, el hilo en la piscina está inactivo y en espera de más trabajo.

En general, los programas de rastreo de pila exactamente el Java nombre de archivo y número de línea en el que el hilo de ejecución se encuentra actualmente en (por lo general cuando un hilo está esperando, los más profundos unos niveles serían demasiado bajo nivel, por lo que sólo siguen en la cadena de encontrar el nivel más significativo).

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=179323&siteId=1
Recomendado
Clasificación