logo

Java-metod och blocksynkronisering

I Java är synkronisering avgörande vid samtidig programmering när flera trådar kommer åt delade resurser. Det säkerställer att endast en tråd kommer åt ett kritiskt avsnitt åt gången, vilket förhindrar datainkonsekvens. Synkronisering kan tillämpas på metoder eller block av kod. Metod vs blocksynkronisering

huggorm full huggorm

Typer av synkronisering

  • Metodsynkronisering: Låser hela metoden för att säkerställa att endast en tråd kör den åt gången.
  • Blockera synkronisering: Låser endast den kritiska delen av koden i en metod.

Synkronisering krävs för föränderliga objekt som nås av flera trådar. Oföränderliga objekt eller skrivskyddad åtkomst kräver inte synkronisering.

Metodsynkronisering

För att synkronisera en metod lägg till det synkroniserade nyckelordet. Detta säkerställer att endast en tråd kan köra metoden åt gången.



Exempel 1: Osynkroniserad metod

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

Produktion
0 0 1 1 2 2 

Förklaring: Trådarna t1 och t2 kommer åt metoden och orsakar samtidigt blandad utdata.

Exempel 2: Synkroniserad metod

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

Produktion
0 1 2 0 1 2 

Förklaring: Endast en tråd exekverar metoden åt gången för att säkerställa datakonsistens.

kantigt material

Blockera synkronisering

Blocksynkronisering används när endast en del av en metod innehåller kritisk kod. Detta förbättrar prestandan genom att tillåta trådar att exekvera icke-kritisk kod samtidigt.

Exempel: Synkroniserat block

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

Produktion
Mohit 

Förklaring: Endast namnet och antalet blockuppdateringar synkroniseras. Att lägga till namn i listan körs samtidigt.

Metod vs blocksynkronisering

SärdragMetodsynkroniseringBlockera synkronisering
Omfattning Låser hela metodenLåser endast det specifika kodblocket
Prestanda Kan orsaka onödig blockering för icke-kritisk kodMer effektivt synkroniseras endast kritiska sektioner
Låsa Skaffar låset på metodens objektSkaffar låset på objektet eller klassen som anges i blocket
Flexibilitet Mindre flexibel hela metoden är låstMer flexibel möjliggör selektiv synkronisering

Viktiga poäng

  • En tråd som går in i en synkroniserad metod/block får ett lås och släpper det vid utgång.
  • Instansmetoder/block: Skaffa lås på objektnivå.
  • Statiska metoder/block: Skaffa lås på klassnivå.
  • Synkronisering på null-objekt ger NullPointerException.
  • wait() notify() och notifyAll() är nyckelmetoder vid synkronisering.
  • Undvik att synkronisera icke-slutliga fält för att förhindra att trådar låser olika objekt.
  • synkroniserade nyckelord kan inte tillämpas på variabler.

Fördelar

  • Säkerställer ömsesidig uteslutning för delade resurser i flertrådade program.
  • Både synkroniserade instanser och statiska metoder kan köras samtidigt eftersom de låser olika objekt.

Begränsningar

  • Förhindrar samtidiga läsningar och begränsar samtidighet.
  • Synkroniserade metoder kan försämra prestandan. Föredra blocksynkronisering endast för kritiska sektioner.
Skapa frågesport