logo

Java metoda a synchronizace bloků

V Javě je synchronizace klíčová při souběžném programování, když více vláken přistupuje ke sdíleným zdrojům. Zajišťuje, že ke kritické sekci přistupuje vždy pouze jedno vlákno, což zabraňuje nekonzistenci dat. Synchronizace může být aplikována na metody nebo bloky kódu. Synchronizace mezi metodami a bloky

římská čísla 1 až 100

Typy synchronizace

  • Synchronizace metod: Uzamkne celou metodu, aby bylo zajištěno, že ji provede vždy pouze jedno vlákno.
  • Synchronizace bloku: Zamkne pouze kritickou část kódu v rámci metody.

Synchronizace je vyžadována pro měnitelné objekty, ke kterým přistupuje více vláken. Neměnné objekty nebo přístup pouze pro čtení nevyžadují synchronizaci.

Synchronizace metod

Pro synchronizaci metody přidejte synchronizované klíčové slovo. Tím je zajištěno, že metodu může spustit vždy pouze jedno vlákno.



Příklad 1: Nesynchronizovaná metoda

Java
class Line {  public void getLine() {  for (int i = 0; i < 3; i++) {  System.out.println(i);  try { Thread.sleep(100); }   catch (Exception e) { System.out.println(e); }  }  } } class Train extends Thread {  Line line;  Train(Line line) { this.line = line; }  public void run() { line.getLine(); } } public class Geeks {  public static void main(String[] args) {  Line obj = new Line();  Train t1 = new Train(obj);  Train t2 = new Train(obj);  t1.start();  t2.start();  } } 

Výstup
0 0 1 1 2 2 

Vysvětlení: Vlákna t1 a t2 přistupují k metodě souběžně, což způsobuje smíšený výstup.

Příklad 2: Synchronizovaná metoda

Java
class Line {  synchronized public void getLine() {  for (int i = 0; i < 3; i++) {  System.out.println(i);  try { Thread.sleep(100); }   catch (Exception e) { System.out.println(e); }  }  } } class Train extends Thread {  Line line;  Train(Line line) { this.line = line; }  public void run() { line.getLine(); } } public class Geeks {  public static void main(String[] args) {  Line obj = new Line();  Train t1 = new Train(obj);  Train t2 = new Train(obj);  t1.start();  t2.start();  } } 

Výstup
0 1 2 0 1 2 

Vysvětlení: Metodu provádí vždy pouze jedno vlákno, což zajišťuje konzistenci dat.

smyčky while a do while v Javě

Synchronizace bloku

Bloková synchronizace se používá, když pouze část metody obsahuje kritický kód. To zlepšuje výkon tím, že umožňuje vláknům spouštět nekritický kód souběžně.

Příklad: Synchronizovaný blok

Java
import java.util.*; class Geek {  String name = '';  public int count = 0;  public void geekName(String geek List<String> list) {  synchronized(this) {  name = geek;  count++;  }  list.add(geek);  } } public class GFG {  public static void main(String[] args) {  Geek gk = new Geek();  List<String> list = new ArrayList<>();  gk.geekName('Mohit' list);  System.out.println(gk.name);  } } 

Výstup
Mohit 

Vysvětlení: Synchronizuje se pouze název a počet aktualizace bloku. Přidávání jmen do seznamu probíhá souběžně.

Metoda vs bloková synchronizace

FunkceSynchronizace metodSynchronizace bloku
Rozsah Uzamkne celou metoduZamkne pouze konkrétní blok kódu
Výkon Může způsobit zbytečné blokování nekritického kóduEfektivnější jsou synchronizovány pouze kritické sekce
Zámek Získá zámek na objektu metodyZíská zámek na objekt nebo třídu zadanou v bloku
Flexibilita Méně flexibilní celá metoda je uzamčenaFlexibilnější umožňuje selektivní synchronizaci

Důležité body

  • Vlákno vstupující do synchronizované metody/bloku získá zámek, který jej uvolní při ukončení.
  • Metody/bloky instance: Získejte zámek na úrovni objektu.
  • Statické metody/bloky: Získejte zámek na úrovni třídy.
  • Synchronizace na null objektech vyvolá výjimku NullPointerException.
  • wait() notify() a notifyAll() jsou klíčové metody synchronizace.
  • Vyhněte se synchronizaci nefinálních polí, abyste zabránili vláknům zamykat různé objekty.
  • synchronizované klíčové slovo nelze použít na proměnné.

Výhody

  • Zajišťuje vzájemné vyloučení sdílených prostředků ve vícevláknových programech.
  • Synchronizované instance i statické metody mohou běžet souběžně, protože zamykají různé objekty.

Omezení

  • Zabraňuje souběžnému čtení a omezuje souběžnost.
  • Synchronizované metody mohou snížit výkon. Preferujte synchronizaci bloků pouze pro kritické sekce.
Vytvořit kvíz