¿Qué es Lock(), UnLock(), ReentrantLock(), TryLock() y en qué se diferencia del Bloque sincronizado en Java?]

Publicado: 2020-07-05

En este tutorial repasaremos Lock(), UnLock(), ReentrantLock(), TryLock() y cómo es diferente del Bloque sincronizado en Java.

Si también tiene preguntas a continuación, entonces está en el lugar correcto.

  • Bloqueos en Java
  • Ejemplo de bloqueo de Java y bloqueo de concurrencia vs sincronizado
  • Tutorial de simultaneidad de Java: bloqueos reentrantes
  • sincronización: uso adecuado de bloqueo/desbloqueo para Java
  • java – Sincronización vs Bloqueo
  • ejemplo de desbloqueo de bloqueo java
  • mecanismo de bloqueo en java
  • java bloquear desbloquear hilo diferente

Empecemos. Primero, entendamos cada uno de estos términos y luego repasaremos el ejemplo de trabajo.

Cerrar con llave():

java.util.concurrent.locks . Un bloqueo es un mecanismo de sincronización de subprocesos como los bloques sincronizados, excepto que los bloqueos pueden ser más sofisticados que los bloques sincronizados de Java. Se trata de interfaces y clases que proporcionan un marco para bloquear y esperar condiciones distintas de la sincronización y los monitores integrados.

Desbloquear():

UnLock() libera el bloqueo de Object.

Bloqueo de reentrada ():

Un ReentrantLock es propiedad del subproceso que se bloqueó con éxito por última vez, pero que aún no lo ha desbloqueado. Un subproceso que invoque el lock regresará, adquiriendo con éxito el bloqueo, cuando el bloqueo no sea propiedad de otro subproceso. El método regresará inmediatamente si el hilo actual ya posee el bloqueo.

ProbarLock():

TryLock() adquiere el bloqueo solo si está libre en el momento de la invocación.

Consejo-1

Si simplemente está bloqueando un objeto, preferiría usar synchronized.

Mientras que con sincronizado, es súper claro e imposible equivocarse:

Detalles del ejemplo:

  1. Crear clase: CrunchifyLockTutorial.java
  2. Crear clases internas: Company y CrunchifyLoop
  3. Desde Main crea dos objetos de clase Empresa
  4. Inicie bucle de hilo para 10 en esos objetos
  5. Mientras Company1 habla con Company2, bloquea un objeto. Si al mismo tiempo, si Company2 quiere hablar con Company1 , entonces dice: Conflicto: el bloqueo ya existe. (Ambas empresas ya están en plática).

Producción:

Consejo-2

Puede lograr todo lo que hacen las utilidades en java.util.concurrent con las primitivas de bajo nivel synchronized , volatile o wait .