synchronized
Java synchronized kalit so‘zi
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;
}
}
}
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.
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
