logo

Јава метода и синхронизација блокова

У Јави синхронизација је кључна у истовременом програмирању када више нити приступа заједничким ресурсима. Осигурава да само једна нит приступа критичном одељку истовремено, чиме се спречава недоследност података. Синхронизација се може применити на методе или блокове кода. Метода против синхронизације блокова

низови у Јави

Врсте синхронизације

  • Синхронизација метода: Закључава цео метод како би се осигурало да га истовремено извршава само једна нит.
  • Блокирај синхронизацију: Закључава само критични део кода унутар методе.

Синхронизација је потребна за променљиве објекте којима приступа више нити. Непроменљиви објекти или приступ само за читање не захтевају синхронизацију.

Синхронизација метода

Да бисте синхронизовали метод, додајте синхронизовану кључну реч. Ово осигурава да само једна нит може да изврши метод у исто време.



Пример 1: Несинхронизовани метод

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

Излаз
0 0 1 1 2 2 

Објашњење: Нити т1 и т2 приступају методи истовремено изазивајући мешовити излаз.

јава сортирање спајањем

Пример 2: Синхронизовани метод

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

Излаз
0 1 2 0 1 2 

Објашњење: Само једна нит извршава метод у исто време обезбеђујући конзистентност података.

Блокирај синхронизацију

Блок синхронизација се користи када само део методе садржи критични код. Ово побољшава перформансе дозвољавајући нитима да истовремено извршавају некритичан код.

Пример: Синхронизовани блок

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

Излаз
Mohit 

Објашњење: Само име и број ажурирања блока су синхронизовани. Додавање имена на листу се одвија истовремено.

Метода против Блок синхронизације

ФеатуреСинхронизација методаБлокирај синхронизацију
Обим Закључава цео методЗакључава само одређени блок кода
Перформансе Може изазвати непотребно блокирање некритичног кодаЕфикасније се синхронизују само критични делови
Закључај Стиче закључавање на објекту методеСтиче закључавање на објекту или класи наведеној у блоку
Флексибилност Мање флексибилан цео метод је закључанФлексибилнији омогућава селективну синхронизацију

Важне тачке

  • Нит која улази у синхронизовани метод/блок добија закључавање које отпушта по изласку.
  • Методе/блокови инстанце: Стицање закључавања на нивоу објекта.
  • Статичке методе/блокови: Стекните закључавање на нивоу класе.
  • Синхронизација на нулл објектима избацује НуллПоинтерЕкцептион.
  • ваит() нотифи() и нотифиАлл() су кључне методе у синхронизацији.
  • Избегавајте синхронизацију поља која нису финална да бисте спречили да нити закључају различите објекте.
  • синхронизована кључна реч се не може применити на променљиве.

Предности

  • Обезбеђује међусобно искључивање за дељене ресурсе у вишенитним програмима.
  • И синхронизоване инстанце и статичке методе могу да се покрећу истовремено јер закључавају различите објекте.

Ограничења

  • Спречава истовремено читање ограничавајући истовременост.
  • Синхронизоване методе могу смањити перформансе. Дајте предност блок синхронизацији само за критичне одељке.
Креирај квиз