¿Cómo funciona esperar / notificar a nivel JVM?

Esperar y notificar parecen mensajes que se pasan entre subprocesos; si esto es cierto, debe haber colas para almacenar estos mensajes en el búfer. Si es así, debe haber operaciones atómicas para agregar mensajes y eliminar mensajes de la cola, ¿también debe haber un subproceso auxiliar para cada subproceso Java que escuche estos mensajes?

Sería genial escuchar tus pensamientos.

Respuesta 1

Espere y notifique que parecen mensajes que se pasan entre hilos,

Realmente no son mensajes. Cuando un subproceso llama, wait()se pone en la cola de espera asociada con el monitor de objeto particular. Cuando otro subproceso llama notify(), extrae el primer subproceso (si lo hay) de la cola y lo coloca en la cola "ejecución". Se trata de cambiar el estado del hilo y poner un hilo en una cola, no mensajes entre hilos.

Si es así, debe haber operaciones atómicas para agregar mensajes y eliminar mensajes de la cola

Lo más probable es que no haya operaciones atómicas alrededor de las colas de mensajes, pero ciertamente hay operaciones atómicas alrededor de probar / configurar ubicaciones de memoria que ayudan a obtener bloqueos y resolver otras disputas de subprocesos.

debe haber un subproceso de ayuda para cada subproceso de Java que escucha estos mensajes?

Ciertamente no hay un hilo auxiliar para cada hilo Java. A medida que los subprocesos Java pasan de un estado a otro o se cortan en el tiempo, tienen un subproceso asociado del sistema operativo que mantiene su estado y realiza todos los mensajes y la señalización. Con la mayoría (si no todas) las implementaciones también tienen el sistema operativo y el hardware que se encarga de la programación del hilo dejando que el código nativo de JVM haga la contabilidad de Java.

Respuesta: 2

¿Es posible ordenar 2d-array por última fila con Arrays.sort (,) en Java. El siguiente fragmento funciona muy bien para ordenar por última columna, pero no parece tener una forma de ajustarse para ordenar por ...

Estoy tratando de sincronizar mi variable de recuento para get y una función auxiliar privada para configurar en función de otros miembros. Varios subprocesos llaman a setCount () como deadlineNoteVisible y ...

Tengo una matriz de bytes y quiero hacer alguna manipulación sobre la base de los datos que tengo en esta matriz. El contenido de la matriz de bytes está en formato hexadecimal. byte [] señal = mensaje.getFieldValue ("...

Estoy tratando de encontrar un ejemplo del uso de Azure Adal (Oauth2) con Dropwizard, pero parece que no puedo encontrar nada. El ejemplo de Oauth2 en el sitio web de Dropwizard es realmente vago, parece que no puedo entender ...