Modelo de subprocesamiento de Java

Tengo una pregunta sobre la teoría normal de subprocesos de Java.

El hilo A ha bloqueado algún objeto, digamos xObj. Ahora, ¿cómo sabe el Hilo B que el Hilo A ya ha bloqueado el objeto xObj?

Cómo se ha implementado esto en Java.

Gracias por adelantado.

Gracias por sus respuestas ... Aquí me gustaría aclarar que ... No tengo que implementar esto. Mi preocupación es cómo Java lo implementó. Cómo el hilo B se dará cuenta de que alguien ya ha bloqueado en Object. Puede ser la clase Object o alguna otra clase ha implementado esto.

Respuesta 1

El hilo A ha bloqueado algún objeto, digamos xObj. Ahora, ¿cómo sabe el Hilo B que el Hilo A ya ha bloqueado el objeto xObj?

Depende del tipo de cerradura del que esté hablando.

  • Para un mutex primitivo, un subproceso no puede probar si otro subproceso contiene el mutex, y mucho menos averiguar qué subproceso es. (Sin embargo, puede probar si mantiene el bloqueo ...)

  • La Lockinterfaz de manera similar no es compatible con esto.

  • La ReentrantLockclase no proporcionan un método para averiguar esto: ver ReentrantLock.getOwner(). Sin embargo, tenga en cuenta que este es un protectedmétodo, por lo que necesitaría crear una subclase de ReentrantLocksi desea que el método esté generalmente disponible.


También cuestionaría el valor de tal método. Solo puede decirle qué hilo (si lo hay) posee el bloqueo en el momento en que se realizó la llamada. Un instante después, el dueño podría haber cambiado.

Por restricción, Thread.holdsLock()le brinda información en la que puede confiar ... aunque es información que no es útil en la mayoría de las circunstancias.

Respuesta: 2

Tienes las siguientes opciones

  1. Thread.holdsLock (objeto Object) en este caso necesitará una instancia de hilo de B en A.
  2. ReentrantLock.getOwner () , ReentrantLock.hasQueuedThread (Hilo de hilo)

Pero no hay necesidad de que B sepa que A tiene el bloqueo, una vez que se libere el bloqueo, estará disponible para que B lo use si no hay hilos esperando en él.

Respuesta: 3

Una biblioteca que estoy escribiendo tiene una clase que implementa un mapa bidimensional y también proporciona, para una lectura eficiente, mapas más pequeños para las vistas de fila / columna. Hasta ahora, todos los métodos se han anulado para que ...

tl; dr: quiero tomar una cadena como: ab% cde% fg hij% klm n% op Y convertirla a cualquiera de (todos son aceptables): 'ab'% c'de '% f'g hij'% k'lm n '% o'p' 'ab'% c'de '% f'g' 'hij'% k'lm '' n '% o'p' 'a''b'% c'd ' 'e'% f '...

Estoy consultando la base de datos. Y tratando de conectar los datos de una tabla en particular y mostrarlos como un xml. Intenté el siguiente código, pero aún así el xml está vacío. Todavía estoy comprobando cuál es el ...

Hola chicos !!! Tengo una cadena con valores como 69 17 17 16 2 1 1 26 26 56 56 69 20 19 20 etc. Ahora según mi necesidad, tengo que poner estos valores en una nueva cadena con cada valor en una nueva línea ...