logo

Java módszer és blokk szinkronizálás

A Java-ban a szinkronizálás kulcsfontosságú a párhuzamos programozásban, amikor több szál fér hozzá a megosztott erőforrásokhoz. Biztosítja, hogy egyszerre csak egy szál férjen hozzá egy kritikus szakaszhoz, elkerülve az adatok inkonzisztenciáját. A szinkronizálás metódusokra vagy kódblokkokra alkalmazható. Method vs Block Synchronization

udp protokoll

A szinkronizálás típusai

  • Módszer szinkronizálás: Zárolja a teljes metódust, hogy egyszerre csak egy szál hajtsa végre.
  • Blokk szinkronizálás: A metóduson belül csak a kód kritikus részét zárolja.

Szinkronizálás szükséges a több szálon keresztül elérhető, változtatható objektumokhoz. A megváltoztathatatlan objektumok vagy az írásvédett hozzáférés nem igényel szinkronizálást.

Módszer szinkronizálás

Egy metódus szinkronizálásához adja hozzá a szinkronizált kulcsszót. Ez biztosítja, hogy egyszerre csak egy szál tudja végrehajtani a metódust.



1. példa: Nem szinkronizált módszer

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();  } } 

Kimenet
0 0 1 1 2 2 

Magyarázat: A t1 és t2 szálak egyszerre érik el a metódust, ami vegyes kimenetet okoz.

java oops fogalmak

2. példa: Szinkronizált módszer

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();  } } 

Kimenet
0 1 2 0 1 2 

Magyarázat: Egyszerre csak egy szál hajtja végre a metódust, biztosítva az adatok konzisztenciáját.

Blokk szinkronizálás

A blokkszinkronizálást akkor használják, ha a metódusnak csak egy része tartalmaz kritikus kódot. Ez javítja a teljesítményt azáltal, hogy lehetővé teszi a szálak nem kritikus kódok egyidejű futtatását.

Példa: Szinkronizált blokk

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);  } } 

Kimenet
Mohit 

Magyarázat: Csak a blokkfrissítés neve és száma szinkronizálódik. A nevek listához való hozzáadása párhuzamosan fut.

Módszer vs blokk szinkronizálás

FunkcióMódszer szinkronizálásBlokk szinkronizálás
Hatály Lezárja a teljes módszertCsak az adott kódblokkot zárolja
Teljesítmény Szükségtelen blokkolást okozhat a nem kritikus kódoknálHatékonyabban csak a kritikus szakaszok szinkronizálódnak
Zár Megszerzi a zárolást a metódus objektumánMegszerzi a blokkban megadott objektum vagy osztály zárolását
Rugalmasság A kevésbé rugalmas teljes módszer zárolva vanRugalmasabb lehetővé teszi a szelektív szinkronizálást

Fontos pontok

  • A szinkronizált metódusba/blokkba belépő szál zárolást kap, és kilépéskor feloldja.
  • Példánymódszerek/blokkok: Objektumszintű zárolás beszerzése.
  • Statikus módszerek/blokkok: Osztályszintű zárolás beszerzése.
  • A null objektumok szinkronizálása NullPointerException kivételt eredményez.
  • A wait() notify() és a notifyAll() kulcsfontosságú metódusok a szinkronizálásban.
  • Kerülje a nem végleges mezők szinkronizálását, nehogy a szálak zárolják a különböző objektumokat.
  • szinkronizált kulcsszó nem alkalmazható változókra.

Előnyök

  • Biztosítja a megosztott erőforrások kölcsönös kizárását a többszálú programokban.
  • Mind a szinkronizált példány, mind a statikus metódusok futhatnak egyidejűleg, mert különböző objektumokat zárolnak.

Korlátozások

  • Megakadályozza, hogy az egyidejű olvasás korlátozza az egyidejűséget.
  • A szinkronizált módszerek ronthatják a teljesítményt. Csak a kritikus szakaszok blokkszinkronizálását részesítse előnyben.
Kvíz létrehozása