logo

Java-menetelmä ja lohkosynkronointi

Javassa synkronointi on ratkaisevan tärkeää samanaikaisessa ohjelmoinnissa, kun useat säikeet käyttävät jaettuja resursseja. Se varmistaa, että vain yksi säie käyttää kriittistä osaa kerrallaan, mikä estää tietojen epäjohdonmukaisuuden. Synkronointia voidaan soveltaa menetelmiin tai koodilohkoihin. Menetelmä vs. lohkosynkronointi

kirjoita json tiedostoon python

Synkronoinnin tyypit

  • Synkronointimenetelmä: Lukitsee koko menetelmän varmistaakseen, että vain yksi säie suorittaa sen kerrallaan.
  • Estä synkronointi: Lukitsee vain koodin kriittisen osan menetelmässä.

Synkronointi vaaditaan muuttuville objekteille, joita käytetään useilla säikeillä. Muuttumattomat objektit tai vain luku -oikeudet eivät vaadi synkronointia.

Menetelmän synkronointi

Synkronoi menetelmä lisäämällä synkronoitu avainsana. Tämä varmistaa, että vain yksi säie voi suorittaa menetelmän kerrallaan.



Esimerkki 1: Synkronoitumaton menetelmä

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

Lähtö
0 0 1 1 2 2 

Selitys: Säikeet t1 ja t2 käyttävät menetelmää samanaikaisesti aiheuttaen sekatuloksen.

Esimerkki 2: Synkronoitu menetelmä

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

Lähtö
0 1 2 0 1 2 

Selitys: Vain yksi säie suorittaa menetelmän kerrallaan varmistaakseen tietojen johdonmukaisuuden.

Estä synkronointi

Lohkosynkronointia käytetään, kun vain osa menetelmästä sisältää kriittistä koodia. Tämä parantaa suorituskykyä sallimalla säikeiden suorittaa ei-kriittistä koodia samanaikaisesti.

hashset java

Esimerkki: Synkronoitu lohko

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

Lähtö
Mohit 

Selitys: Vain lohkon päivityksen nimi ja määrä synkronoidaan. Nimien lisääminen luetteloon tapahtuu samanaikaisesti.

Menetelmä vs lohkosynkronointi

OminaisuusMenetelmän synkronointiEstä synkronointi
Laajuus Lukitsee koko menetelmänLukitsee vain tietyn koodilohkon
Suorituskyky Voi aiheuttaa tarpeettoman eston ei-kriittiselle koodilleTehokkaammin vain kriittiset osat synkronoidaan
Lukko Hanki lukon menetelmän objektiinSaa lukon lohkossa määritettyyn objektiin tai luokkaan
Joustavuus Vähemmän joustava koko menetelmä on lukittuJoustavampi mahdollistaa valikoivan synkronoinnin

Tärkeitä kohtia

  • Synkronoituun menetelmään/lohkoon saapuva säie saa lukon ja vapauttaa sen poistuessaan.
  • Ilmentymän menetelmät/lohkot: Hanki objektitason lukitus.
  • Staattiset menetelmät/lohkot: Hanki luokkatason lukitus.
  • Nollaobjektien synkronointi aiheuttaa NullPointerExceptionin.
  • wait() notify() ja notifyAll() ovat avainmenetelmiä synkronoinnissa.
  • Vältä ei-lopullisten kenttien synkronointia, jotta säikeet eivät lukitse eri objekteja.
  • synkronoitua avainsanaa ei voi soveltaa muuttujiin.

Edut

  • Varmistaa jaettujen resurssien vastavuoroisen poissulkemisen monisäikeisissä ohjelmissa.
  • Sekä synkronoitu ilmentymä että staattiset menetelmät voivat toimia samanaikaisesti, koska ne lukitsevat eri objekteja.

Rajoitukset

  • Estää samanaikaisia ​​lukuja rajoittamasta samanaikaisuutta.
  • Synkronoidut menetelmät voivat heikentää suorituskykyä. Suosi lohkosynkronointia vain kriittisille osille.
Luo tietokilpailu