Impasse en java

Impasse en java
Java fournit un concept de multithreading qui permet à un processus d'exécuter plus d'un thread en même temps. Le multithreading offre un large éventail d'avantages tels que l'utilisation maximale du processeur, le temps d'économie, la diminution des coûts de maintenance, etc. Cependant, il a aussi des inconvénients et parmi eux, la limitation la plus courante est que plusieurs fils entrent dans un état d'attente et sont bloqués pour toujours et que cette situation est appelée une impasse en Java.

Dans cet article, nous allons apprendre les aspects ci-dessous des impasses en Java:

  • Qu'est-ce qu'une impasse?
  • Quand et où une impasse peut se produire
  • Exemples de blocage
  • Comment empêcher une impasse en Java

Alors commençons!

Qu'est-ce qu'une impasse?

Deadlock décrit une situation où deux autres threads tentent d'accéder à la même ressource simultanément et, par conséquent, personne n'obtient la ressource et est finalement bloqué pour toujours.

Quand et où une impasse peut se produire

En Java, le scénario de l'impasse ne peut se produire que dans l'environnement multithread où plus d'un thread s'exécute en même temps. De plus, un mot-clé synchronisé peut provoquer une impasse en Java.

D'après la figure ci-dessus, nous pouvons observer que Thread1 attend que Thread2 divulgue les ressources et vice versa.

Exemples de blocage

Voyons l'exemple donné ci-dessous pour une profonde compréhension de la façon dont une impasse se produit en Java:

classe publique daadlockexample
public static void main (String [] args)
String final res1 = "première ressource";
String final res2 = "deuxième ressource";
Thread thread1 = nouveau thread ()
public void run ()
synchronisé (res1)
Système.dehors.println ("Thread 1: verrouillé le res1");
essayer
Fil.Sleep (2000);
catch (exception excep)

synchronisé (res2)
Système.dehors.println ("Thread 1: verrouillé le res2");



;
Thread thread2 = new Thread ()
public void run ()
synchronisé (res2)
Système.dehors.println ("Thread 2: verrouillé le res2");
essayer
Fil.Sleep (2000);
catch (exception excep)

synchronisé (res1)
Système.dehors.println ("Thread 2: verrouillé le res1");



;
thread1.commencer();
thread2.commencer();

Dans cet exemple, nous avons deux threads thread1 et thread2, les deux threads commencent et appellent la méthode run ().

Voici la sortie de l'extrait ci-dessus:

De l'extrait ci-dessus, il est clair que les deux fils se verrouillaient les uns les autres.

Comment empêcher une impasse en Java

Vous trouverez ci-dessous la liste des préventions qui peuvent être adoptées pour éviter une impasse en Java:

  • Évitez l'utilisation de serrures imbriquées et inutiles.
  • Acquérir les verrous dans le même ordre.
  • Utilisez des jointures de fil pour éviter l'impasse je.e., Libérez un verrou après un délai d'expiration.

Conclusion

Deadlock décrit une situation où deux autres threads tentent d'accéder à la même ressource simultanément et, par conséquent, personne n'obtient la ressource et est finalement bloqué pour toujours. En Java, une impasse ne se produit que dans l'environnement multithread où plus d'un thread s'exécute en même temps. De plus, un mot-clé synchronisé peut provoquer une impasse en Java. En Java, une impasse ne peut pas être complètement résolu cependant, il peut être évité en adoptant certaines précautions / règles nécessaires.g. Éviter l'utilisation de serrures inutiles, de serrures imbriquées, etc.

Cet article présente un aperçu détaillé de ce qui est des impasses en Java, comment se produisent les impasses et comment éviter les impasses en Java.