synchronized

Java synchronized kalit so‘zi

❮ Java kalit so‘zlari


Misol

Oqimlar o‘rtasidagi poyga holatlarining (race conditions) oldini olish uchun synchronized modifikatoridan foydalaning:

public class Main implements Runnable {
  public static int a, b;

  public static void main(String[] args) {
    a = 100;
    b = 100;

    // Check the total amount shared between a and b before the transfers
    System.out.println("Total before: " + (a + b));

    // Run threads which will transfer amounts between a and b
    Thread thread1 = new Thread(new Main());
    Thread thread2 = new Thread(new Main());
    thread1.start();
    thread2.start();

    // Wait for the threads to finish running
    try {
      thread1.join();
      thread2.join();
    } catch (InterruptedException e) {
      e.printStackTrace();
    }

    // Check the total amount shared between a and b after the transfers
    // It should be the same amount as before
    System.out.println("Total after: " + (a + b));
  }

  public void run() {
    for (int i = 0; i < 10000000; i++) {
      transfer();
    }
  }

  public static synchronized void transfer() {
    // Choose a random amount to transfer
    int amount = (int) (5.0 * Math.random());

    // Transfer between a and b
    if (a > b) {
      a -= amount;
      b += amount;
    } else {
      a += amount;
      b -= amount;
    }
  }
}

O‘zingiz sinab ko‘ring »


ULASHISH

Ta’rif va qo‘llanilishi

synchronized kalit so‘zi metodni qulflaydigan modifikator bo‘lib, bir vaqtning o‘zida uni faqat bitta oqim ishlata oladi. Bu oqimlar o‘rtasidagi poyga holatlaridan kelib chiqadigan muammolarning oldini oladi.

Yuqoridagi misolda transfer() metodidan synchronized kalit so‘zini olib tashlash amallar orasida a va b qiymatlarining boshqa oqim tomonidan o‘zgartirilishiga olib kelishi mumkin. Natijada ikki o‘zgaruvchidagi umumiy miqdor o‘zgarib ketadi.


Tegishli sahifalar

Modifikatorlar haqida Java modifikatorlari darsligimizda batafsil o‘qing.

Oqimlar haqida Java oqimlar (threads) darsligimizda batafsil o‘qing.


❮ Java kalit so‘zlari

W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!