Qu'est-ce que Lock(), UnLock(), ReentrantLock(), TryLock() et en quoi est-ce différent de Synchronized Block en Java ?]

Publié: 2020-07-05

Dans ce didacticiel, nous allons passer en revue Lock(), UnLock(), ReentrantLock(), TryLock() et la différence avec Synchronized Block en Java.

Si vous avez également des questions ci-dessous, vous êtes au bon endroit.

  • Verrous en Java
  • Exemple de verrouillage Java et verrouillage de la concurrence vs synchronisation
  • Tutoriel Java Concurrency - Verrous réentrants
  • synchronisation - Utilisation correcte du verrouillage/déverrouillage pour Java
  • java – Synchronisation vs Verrouillage
  • exemple de déverrouillage de verrouillage java
  • mécanisme de verrouillage en java
  • java lock déverrouiller différents threads

Commençons. Tout d'abord, comprenons chacun de ces termes, puis nous passerons en revue l'exemple de travail.

Fermer à clé():

java.util.concurrent.locks . Un verrou est un mécanisme de synchronisation de thread comme les blocs synchronisés, sauf que les verrous peuvent être plus sophistiqués que les blocs synchronisés de Java. Il s'agit d'interfaces et de classes fournissant un cadre pour le verrouillage et l'attente de conditions distinctes de la synchronisation et des moniteurs intégrés.

Ouvrir():

UnLock() libère le verrou sur l'objet.

ReentrantLock() :

Un ReentrantLock appartient au dernier thread qui s'est verrouillé avec succès, mais ne l'a pas encore déverrouillé. Un thread invoquant lock retournera, acquérant avec succès le verrou, lorsque le verrou n'appartient pas à un autre thread. La méthode retournera immédiatement si le thread actuel possède déjà le verrou.

TryLock() :

TryLock() acquiert le verrou uniquement s'il est libre au moment de l'invocation.

Astuce-1

Si vous verrouillez simplement un objet, je préférerais utiliser synchronized.

Alors qu'avec synchronisé, c'est super clair et impossible de se tromper :

Détails de l'exemple :

  1. Créer une classe : CrunchifyLockTutorial.java
  2. Créer des classes internes : Company et CrunchifyLoop
  3. À partir de Main, créez deux objets de la classe Company
  4. Démarrer la boucle de thread pour 10 sur ces objets
  5. Pendant que Company1 parle à Company2, elle verrouille un objet. Si en même temps - si Company2 veut parler à Company1 alors il dit - Conflit - Le verrou existe déjà. (Les deux sociétés sont déjà en discussion).

Sortir:

Astuce-2

Vous pouvez réaliser tout ce que font les utilitaires de java.util.concurrent avec les primitives de bas niveau telles que synchronized , volatile ou wait .