Cuando dos subprocesos intentan adquirir el bloqueo del mismo objeto, ¿cuáles son las cosas que se consideran para decidir a qué subproceso se debe entregar el bloqueo?¿Qué determina cuál de los dos hilos que compiten adquiere un bloqueo?
Respuesta
Según la Java documentation for notify():
Despierta un solo hilo que está esperando en el monitor de este objeto. Si hay hilos esperando en este objeto, uno de ellos se elige para ser despertado. La elección es arbitraria y ocurre a discreción de la implementación . Un subproceso espera en el monitor de un objeto llamando al de los métodos de espera.
tanto, si utiliza synchronized(obj){}
que básicamente tienen ningún control sobre la cual hilo obtener el bloqueo en obj
, y no se puede hacer ninguna suposición. Depende del planificador.
Si quiere equidad (es decir, el siguiente hilo que obtiene el candado es el primero en la cola), eche un vistazo a ReentrantLock: tiene un indicador booleano para especificar que desea aplicar equidad.
Según Java Oracle Docs:
El constructor de esta clase acepta un parámetro de equidad opcional. Cuando se establece como verdadero, bajo contención, los bloqueos favorecen el acceso al hilo de espera más larga. De lo contrario, este bloqueo no garantiza ninguna orden de acceso particular.
Si permite imparcialidad, se usa FIFO (First-in-First-out), de lo contrario parece aleatorio (según mis observaciones).
está asumiendo que usa ReentrantLock ... solo dijo "hilos que compiten por un bloqueo en el mismo objeto", que podría ser cualquier Objeto IMHO –
- 1. CUDA que determina los hilos por bloque, bloques por cuadrícula
- 2. ¿Cómo se terminan los hilos durante un bloqueo de Linux?
- 3. ¿Qué editores modernos compiten con emacs/vi?
- 4. C# .NET: ¿Adquiere los derechos de administrador?
- 5. ¿Por qué deberías bloquear los hilos?
- 6. ¿Por qué PLINQ usa solo dos hilos?
- 7. Java: un método sincronizado en la superclase adquiere el mismo bloqueo que uno en la subclase, ¿verdad?
- 8. Qué recursos capturan los hilos bloqueados
- 9. Cómo liberar inmediatamente los hilos que esperan en un BlockingQueue
- 10. Llamada recv() en el mismo zócalo de bloqueo de dos hilos
- 11. scala actors vs hilos y bloqueo IO
- 12. Bloqueo Mutex: ¿qué significa "bloqueo"?
- 13. ¿Cuál es el patrón correcto para esperar a que se libere un bloqueo de archivos?
- 14. ¿Tengo un bloqueo dos veces en Magento?
- 15. Comunicación entre dos hilos
- 16. Volcados de subprocesos de JVM que contienen monitores sin hilos de bloqueo
- 17. ¿Cómo se determina que PlotRange incluye todos los gráficos?
- 18. ¿Qué hilo obtendrá el bloqueo?
- 19. bloqueo en una variable en múltiples hilos
- 20. Interrupción de dos pthreads de bloqueo mediante señales
- 21. Señalización de todos los hilos en un proceso
- 22. Aborto simultáneo() en dos hilos
- 23. ¿Las operaciones atómicas que compiten entre sí pueden morir de hambre?
- 24. ¿Espera a que terminen todos los hilos en un ejecutor?
- 25. entendimiento sincronización de hilos de bloqueo y no Thread.MemoryBarrier
- 26. ¿Por qué los hilos IIS son tan preciados en comparación con los hilos regulares de CLR?
- 27. ¿Por qué necesitamos un ejecutable para iniciar los hilos?
- 28. Inicializando dos hilos con la misma instancia de un ejecutable
- 29. ¿Qué tan seguro para los hilos es V4L2?
- 30. ¿Qué son los hilos de fondo, primer plano y principales?
Gracias. Además, parece que el bloqueo sincronizado (obj) invoca wait() también. ¿Podría describir la cadena de acciones que se realizan antes, durante y después del bloque o métodos sincronizados? – itsraja
¿Qué quiere decir? El algoritmo utilizado para garantizar la exclusión mutua en una pieza de código? ¿O el algoritmo de programación? Para el primero, solo conceptualmente, es posible que desee echarle un vistazo al algoritmo de Peterson: https://en.wikipedia.org/wiki/Peterson's_algorithm. Para este último, se trata aquí: http://stackoverflow.com/questions/2816011/what-is-the-jvm-scheduling-algorithm –
Gracias. Me refería a la exclusión mutua en términos de los métodos de Java. como wait(), notify() ... Estaré encantado de ver una secuencia de estas llamadas a función simuladas para 2 hilos que intentan 1 objeto. Oye, esto es análogo a 2 (o más) niños que proponen 1 niña. Lo llaman matrimonio;) – itsraja