O que é Lock(), UnLock(), ReentrantLock(), TryLock() e como é diferente do Bloco Sincronizado em Java?]

Publicados: 2020-07-05

Neste tutorial, veremos Lock(), UnLock(), ReentrantLock(), TryLock() e como é diferente do Bloco Sincronizado em Java.

Se você também tem perguntas abaixo, então você está no lugar certo.

  • Bloqueios em Java
  • Exemplo de bloqueio de Java e bloqueio de simultaneidade vs sincronizado
  • Tutorial de simultaneidade Java – Bloqueios reentrantes
  • sincronização – Uso adequado de bloqueio/desbloqueio para Java
  • java – Sincronização vs Bloqueio
  • exemplo de desbloqueio de bloqueio java
  • mecanismo de bloqueio em java
  • java lock desbloquear thread diferente

Vamos começar. 1º vamos entender cada um desses termos e depois vamos ver o exemplo de trabalho.

Trancar():

java.util.concurrent.locks . Um bloqueio é um mecanismo de sincronização de threads como blocos sincronizados, exceto que os bloqueios podem ser mais sofisticados do que os blocos sincronizados do Java. É uma interface e classes que fornecem uma estrutura para bloqueio e espera por condições distintas da sincronização e monitores internos.

Desbloquear():

UnLock() libera o bloqueio em Object.

ReentranteLock():

Um ReentrantLock é de propriedade do último encadeamento bloqueando com êxito, mas ainda não o desbloqueando. Um encadeamento que invoca o lock retornará, adquirindo o bloqueio com êxito, quando o bloqueio não pertencer a outro encadeamento. O método retornará imediatamente se o thread atual já possuir o bloqueio.

TryLock():

TryLock() adquire o bloqueio somente se estiver livre no momento da invocação.

Dica-1

Se você está simplesmente bloqueando um objeto, prefiro usar synchronized.

Considerando que com sincronizado, é super claro e impossível errar:

Detalhes do exemplo:

  1. Criar classe: CrunchifyLockTutorial.java
  2. Crie classes internas: Company e CrunchifyLoop
  3. De Main crie dois objetos da classe Company
  4. Inicie o loop de thread para 10 nesses objetos
  5. Enquanto Company1 fala com Company2 – ele bloqueia um objeto. Se ao mesmo tempo – se Company2 quiser falar com Company1 , então ele diz – Conflicting – Lock já existe. (Ambas as empresas já estão conversando).

Saída:

Dica-2

Você pode conseguir tudo o que os utilitários em java.util.concurrent fazem com as primitivas de baixo nível como synchronized , volatile , ou wait .