Ako zvládnuť zablokovanie v Jave?



Tento článok sa venuje konceptu Deadlock In Java s príkladom, ktorý ukazuje, ako sa vlákna vo viacvláknovom programe blokujú.

Programovací jazyk Java podporuje . Zahŕňa viac vlákien bežiacich súčasne pre multitasking. Ale v určitých prípadoch alebo kvôli určitým nedostatkom sa vlákna ocitnú v čakajúcom stave navždy. V tomto článku pochopíme stav zablokovania v a rôznymi spôsobmi, ako sa tomu vyhnúť. Nasledujú témy diskutované v tomto blogu:

Čo je zablokovanie v prostredí Java?

Zablokovanie v Jave je stav, keď sú navždy blokované dve alebo viac vlákien, ktoré na seba čakajú.





Zvyčajne sa to stane, keď viac vlákien vyžaduje rovnaké zámky, ale získavajú ich v rôznych objednávkach. v Jave trpí patová situácia kvôli synchronizovanému kľúčovému slovu.

Spôsobí to blokovanie vykonávajúceho vlákna počas čakania na zámok alebo monitor spojený s uvedeným objekt .



Zablokovanie v Jave - Edureka

Príklad zablokovania

public class Príklad {public static void main (String [] args) {final String r1 = 'edureka' final String r2 = 'java' Thread t1 = new Thread () {public void run () {synchronized (r1) {System. out.println ('Thread 1: Locked r1') try {Thread.sleep (100)} catch (exception e) {} synchronized (r2) {System.out.println ('Thread 1: Locked r2')}}} } Vlákno t2 = nové vlákno () {public void run () {synchronized (r1) {System.out.println ('Thread 2: Locked r1') try {Thread.sleep (100)} catch (exception e) {} synchronized (r2) {System.out.println ('Thread 2: Locked r2')}}}} t1.start () t2.start ()}}
 Výkon: Závit 1: zamknutý r1 Závit 2: zamknutý r2

Ako sa vyhnúť zablokovaniu v Jave?

Aj keď nie je úplne možné vyhnúť sa uviaznutiu, môžeme však dodržiavať určité opatrenia alebo ukazovatele, aby sme sa im vyhli:

__init__
  • Vyhnite sa vnoreným zámkom - Musíte sa vyhnúť zámkom viacerých vlákien, to je hlavný dôvod zablokovania. Spravidla sa to stane, keď dáte zámky viacerým vláknam.

  • Vyhnite sa zbytočným zámkom - Zámky by sa mali dať dôležitým vláknam. Poskytnutie zámkov nepotrebným vláknam, ktoré spôsobujú zablokovanie.



  • Používanie spojenia závitov - Zablokovanie sa zvyčajne stane, keď jedno vlákno čaká na dokončenie druhého. V takom prípade môžeme Thread.join použiť s maximálnym časom, ktorý vlákno zaberie.

Týmto sa dostávame na koniec tohto článku, kde sme sa dozvedeli o zablokovaní v prostredí Java a o tom, ako sa mu vyhnúť. Dúfam, že máte prehľad o všetkom, čo bolo s vami zdieľané v tomto tutoriále.

previesť dvojité na celé číslo v jave

Ak považujete tento článok o „zablokovaní v Jave“ za relevantný, pozrite si stránku dôveryhodná online vzdelávacia spoločnosť so sieťou viac ako 250 000 spokojných študentov rozmiestnených po celom svete.

Sme tu, aby sme vám pomohli na každom kroku na vašej ceste a prišli s učebným plánom, ktorý je určený pre študentov a profesionálov, ktorí sa chcú stať vývojármi Java. Kurz je navrhnutý tak, aby vám dal náskok v programovaní v Jave a naučil vás základné aj pokročilé koncepty Javy spolu s rôznymi Páči sa mi to Hibernácia & .

Ak narazíte na akékoľvek otázky, neváhajte sa ich opýtať v sekcii komentárov „Deadlock In Java“ a náš tím na ne rád odpovie.