Deadlock i Java

Deadlock i Java
Java gir et konsept med multithreading som gjør at en prosess kan utføre mer enn en tråd samtidig. Multithreading gir et bredt spekter av fordeler som maksimal CPU -utnyttelse, sparingstid, reduserende vedlikeholdskostnader osv. Imidlertid har det noen ulemper også, og blant dem er den vanligste begrensningen at flere tråder går i en ventende tilstand og er blokkert for alltid, og denne situasjonen kalles en dødvakt i Java.

I denne oppskrivningen skal vi lære de nedenfor-listede aspektene ved deadlocks i Java:

  • Hva er en dødvakt?
  • Når og hvor en dødvakt kan oppstå
  • Eksempler på deadlock
  • Hvordan forhindre en dødvakt i Java

Så la oss starte!

Hva er en dødvakt?

Deadlock beskriver en situasjon der ytterligere to tråder prøver å få tilgang til den samme ressursen samtidig, og som et resultat får ingen ressursen og til slutt blokkeres for alltid.

Når og hvor en dødvakt kan oppstå

I Java kan dødvaktscenariet bare forekomme i det multithreaded miljøet der mer enn en tråd utføres samtidig. Dessuten kan et synkronisert nøkkelord forårsake en dødvakt i Java.

Fra figuren ovenfor kan vi observere at tråd1 venter på at tråd2 skal frigjøre ressursene og omvendt.

Eksempler på deadlock

La oss vurdere det undergitte eksemplet for en dyp forståelse av hvordan en dødvakt oppstår i Java:

offentlig klasse DeadlockeExample
public static void main (String [] args)
Final String Res1 = "Første ressurs";
Final String Res2 = "Second Resource";
Tråd tråd1 = ny tråd ()
public void run ()
synkronisert (res1)
System.ute.Println ("Tråd 1: Låst RES1");
prøv
Tråd.søvn (2000);
fangst (unntak excep)

synkronisert (res2)
System.ute.Println ("Tråd 1: Låst RES2");



;
Tråd tråd2 = ny tråd ()
public void run ()
synkronisert (res2)
System.ute.println ("Tråd 2: låst res2");
prøv
Tråd.søvn (2000);
fangst (unntak excep)

synkronisert (res1)
System.ute.Println ("Tråd 2: Låst RES1");



;
Tråd1.start();
Tråd2.start();

I dette eksemplet har vi to tråder tråd1 og tråd2, begge trådene starter og kaller kjør () -metoden.

Følgende vil være utgangen for ovennevnte utdrag:

Fra ovennevnte utdrag er det tydelig at begge trådene låste hverandre.

Hvordan forhindre en dødvakt i Java

Nedenfor er listen over forebygginger som kan vedtas for å unngå en dødvakt i Java:

  • Unngå bruk av nestede og unødvendige låser.
  • Skaffe låsene i samme rekkefølge.
  • Bruk trådforbindelser for å unngå dødvakt.e., Slipp en lås etter en tidsavbruddsperiode.

Konklusjon

Deadlock beskriver en situasjon der ytterligere to tråder prøver å få tilgang til den samme ressursen samtidig, og som et resultat får ingen ressursen og til slutt blokkeres for alltid. I Java forekommer en dødvakt bare i det flertrådede miljøet der mer enn en tråd utføres samtidig. Dessuten kan et synkronisert nøkkelord forårsake en dødvakt i Java. I Java kan en dødvakt ikke løses fullstendig, men den kan unngås ved å ta i bruk noen nødvendige forholdsregler/regler e.g. Unngå bruk av unødvendige låser, nestede låser osv.

Denne oppskrivningen presenterer en detaljert oversikt over hva som er deadlocks i Java, hvordan deadlocks forekommer, og hvordan du kan unngå deadlocks i Java.