Zaklebienie w Javie

Zaklebienie w Javie
Java zapewnia koncepcję wielowy, która pozwala procesowi wykonywać więcej niż jeden wątek w tym samym czasie. Multitreading zapewnia szeroki zakres korzyści, takich jak maksymalne wykorzystanie procesora, czas oszczędzania, obniżenie kosztów konserwacji itp. Ma jednak również pewne wady, a wśród nich najczęstszym ograniczeniem jest to, że wiele wątków przechodzi w stan oczekiwania i jest zablokowanych na zawsze, a sytuacja ta nazywa się impasem w Javie.

W tym artykule nauczymy się poniżej na liście aspektów impasów w Javie:

  • Co to jest impas?
  • Kiedy i gdzie może wystąpić impas
  • Przykłady impasu
  • Jak zapobiec impasowi w Javie

A więc zacznijmy!

Co to jest impas?

Deallock opisuje sytuację, w której dwa kolejne wątki próbują jednocześnie uzyskać dostęp do tego samego zasobu, w wyniku czego nikt nie otrzymuje zasobu i ostatecznie jest zablokowany na zawsze.

Kiedy i gdzie może wystąpić impas

W Javie scenariusz impas może wystąpić tylko w wieloosobowym środowisku, w którym więcej niż jeden wątek wykonuje się jednocześnie. Ponadto zsynchronizowane słowo kluczowe może spowodować impas w Javie.

Z powyższego figury możemy zauważyć, że Thread1 czeka, aż Thread2 zwolni zasoby i odwrotnie.

Przykłady impasu

Rozważmy poniżej uzyskany przykład, aby głębokie zrozumienie, w jaki sposób impas występuje w Javie:

Klasa publiczna Deadlockexample
public static void main (string [] args)
końcowy ciąg res1 = "pierwszy zasób";
końcowy ciąg res2 = "drugi zasób";
Wątek wątek1 = nowy wątek ()
public void run ()
synchronizowane (res1)
System.na zewnątrz.println („Wątek 1: zablokowany res1”);
próbować
Nitka.Sleep (2000);
catch (wyjątek Excep)

synchronizowane (res2)
System.na zewnątrz.println („Wątek 1: zablokowany res2”);



;
Wątek wątku2 = nowy wątek ()
public void run ()
synchronizowane (res2)
System.na zewnątrz.println („Wątek 2: zablokowany res2”);
próbować
Nitka.Sleep (2000);
catch (wyjątek Excep)

synchronizowane (res1)
System.na zewnątrz.println („Wątek 2: zablokowany res1”);



;
Thread1.początek();
wątek2.początek();

W tym przykładzie mamy dwa wątki Thread1 i Thread2, oba wątki rozpoczynają się i wywołują metodę run ().

Poniżej pojawią się wyjście dla powyższego fragmentu:

Z powyższego fragmentu jasne jest, że oba wątki zablokowały się.

Jak zapobiec impasowi w Javie

Poniżej znajduje się lista zapobiegania, które można przyjąć, aby uniknąć impasu w Javie:

  • Unikaj używania zagnieżdżonych i niepotrzebnych zamków.
  • Nabyć zamki w tej samej kolejności.
  • Użyj wątku, aby uniknąć impasu i.mi., Zwolnij zamek po okresie czasu.

Wniosek

Deallock opisuje sytuację, w której dwa kolejne wątki próbują jednocześnie uzyskać dostęp do tego samego zasobu, w wyniku czego nikt nie otrzymuje zasobu i ostatecznie jest zablokowany na zawsze. W Javie impas występuje tylko w środowisku wielowątkowym, w którym więcej niż jeden wątek wykonuje się jednocześnie. Ponadto zsynchronizowane słowo kluczowe może spowodować impas w Javie. W Javie nie można całkowicie rozwiązać impasu, jednak można go uniknąć, przyjmując pewne niezbędne środki ostrożności/zasady E.G. Unikanie użycia niepotrzebnych zamków, zagnieżdżonych zamków itp.

Ten zapis przedstawia szczegółowy przegląd tego, jakie są zakleszczenia w Javie, jak się zdarza i jak uniknąć zakleszczeń w Javie.