thread sincronizacion resueltos multitarea multihilos hilos ejemplos ejemplo detener clase java multithreading jvm scheduling

sincronizacion - thread java



Java: esperando en el bloque sincronizado, ¿quién va primero? (4)

Esta pregunta está inspirada en esta otra pregunta .

Si hay varios subprocesos esperando en un bloque synchronized y el bloqueo está disponible, ¿quién va primero? ¿Es por prioridad de subproceso (y luego primero por orden de llegada)?

¿Y se aplican las mismas reglas para notify (con múltiples hilos de wait )?


Alguien más mencionó la disponibilidad de cerraduras justas. Si realmente te importa quién es el primero, entonces es posible que tengas un problema en tiempo real. En ese caso, puede hacer uso de RTSJ, donde se especifica el orden y la semántica de la adquisición de bloqueo. Los detalles están disponibles en la especificación RTSJ en Sincronización . Citando de la sección de razonamiento:

Las reglas de Java para el código sincronizado proporcionan un medio para la exclusión mutua, pero no evitan las inversiones de prioridad ilimitadas y, por lo tanto, son insuficientes para las aplicaciones en tiempo real. Esta especificación refuerza la semántica para el código sincronizado ordenando el control de inversión de prioridad, en particular proporcionando clases para herencia de prioridad y emulación de techo de prioridad. La herencia prioritaria se implementa más ampliamente en sistemas operativos en tiempo real y, por lo tanto, se requiere y es el mecanismo predeterminado inicial en esta especificación.



Depende de la prioridad de subprocesos y del algoritmo de programación de subprocesos y también el bloqueo en el bloque sincronizado no es "justo". Esto significa que si hay 2 hilos en espera con la misma prioridad y el primer hilo esperó más que el segundo, eso no significa necesariamente que el primer hilo se ejecutará primero.