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
Javaclass 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
Javaclass 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
Javaimport 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čajka | Sinkronizacija metode | Sinkronizacija blokova |
|---|---|---|
| Opseg | Zaključava cijelu metodu | Zaključava samo određeni blok koda |
| Performanse | Može uzrokovati nepotrebno blokiranje koda koji nije kritičan | Učinkovitije sinkronizirane su samo kritične sekcije |
| brava | Stječe zaključavanje objekta metode | Stječe zaključavanje objekta ili klase navedene u bloku |
| Fleksibilnost | Manje fleksibilna cijela metoda je zaključana | Fleksibilniji 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.