logo

Java metoda i sinkronizacija blokova

U Javi sinkronizacija je ključna u istovremenom programiranju kada više niti pristupa zajedničkim resursima. Osigurava da samo jedna nit istovremeno pristupa kritičnom odjeljku čime se sprječava nedosljednost podataka. Sinkronizacija se može primijeniti na metode ili blokove koda. Sinkronizacija metoda protiv blokova

popis za inicijalizaciju pythona

Vrste sinkronizacije

  • Metoda sinkronizacije: Zaključava cijelu metodu kako bi se osiguralo da je samo jedna nit izvršava istovremeno.
  • Sinkronizacija blokova: Zaključava samo kritični dio koda unutar metode.

Sinkronizacija je potrebna za promjenjive objekte kojima pristupa više niti. Nepromjenjivi objekti ili pristup samo za čitanje ne zahtijevaju sinkronizaciju.

Sinkronizacija metode

Za sinkronizaciju metode dodajte ključnu riječ synchronized. Ovo osigurava da samo jedna nit može izvršiti metodu u isto vrijeme.



Primjer 1: Nesinkronizirana 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();  } } 

Izlaz
0 0 1 1 2 2 

Obrazloženje: Niti t1 i t2 istovremeno pristupaju metodi uzrokujući miješani izlaz.

koliko nula za jedan milijun

Primjer 2: Sinkronizirana 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();  } } 

Izlaz
0 1 2 0 1 2 

Obrazloženje: Samo jedna nit izvršava metodu u trenutku osiguravajući dosljednost podataka.

Sinkronizacija blokova

Blok sinkronizacija se koristi kada samo dio metode sadrži kritični kod. Ovo poboljšava izvedbu dopuštajući nitima da istovremeno izvršavaju nekritičan kod.

Primjer: Sinkronizirani 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);  } } 

Izlaz
Mohit 

Obrazloženje: Sinkronizirani su samo naziv i broj ažuriranja bloka. Dodavanje imena na popis izvodi se istovremeno.

Sinkronizacija metode nasuprot bloku

ZnačajkaSinkronizacija metodeSinkronizacija blokova
Opseg Zaključava cijelu metoduZaključava samo određeni blok koda
Performanse Može uzrokovati nepotrebno blokiranje koda koji nije kritičanUčinkovitije sinkronizirane su samo kritične sekcije
brava Stječe zaključavanje objekta metodeStječe zaključavanje objekta ili klase navedene u bloku
Fleksibilnost Manje fleksibilna cijela metoda je zaključanaFleksibilniji omogućuje selektivnu sinkronizaciju

Važne točke

  • Nit koja ulazi u sinkroniziranu metodu/blok dobiva zaključavanje koje otpušta nakon izlaska.
  • Metode/blokovi instance: Stjecanje zaključavanja na razini objekta.
  • Statičke metode/blokovi: Nabavite zaključavanje na razini klase.
  • Sinkronizacija na null objektima izbacuje NullPointerException.
  • wait() notify() i notifyAll() su ključne metode u sinkronizaciji.
  • Izbjegavajte sinkronizaciju ne-konačnih polja kako biste spriječili niti da zaključaju različite objekte.
  • sinkronizirana ključna riječ ne može se primijeniti na varijable.

Prednosti

  • Osigurava međusobno isključivanje zajedničkih resursa u višenitnim programima.
  • I sinkronizirana instanca i statičke metode mogu se izvoditi istovremeno jer zaključavaju različite objekte.

Ograničenja

  • Sprječava istovremeno čitanje ograničavajući istovremenost.
  • Sinkronizirane metode mogu pogoršati performanse. Preferiraj sinkronizaciju blokova samo za kritične dijelove.
Napravi kviz