AtomicInteger ialah pembolehubah atom yang membolehkan akses serentak daripada berbilang rangkaian. Ini membolehkan penyegerakan yang cekap dan menghapuskan keperluan untuk kunci luaran. Memahami kes penggunaan biasa AtomicInteger boleh membantu anda memanfaatkan keupayaannya dengan berkesan.
Kes Penggunaan
AtomicInteger biasanya digunakan dalam situasi berikut:
Pebilang Atom: Integer Atom berfungsi sebagai pembilang atom, seperti dalam senario serentak di mana berbilang benang perlu menambah atau mengurangkan pembilang yang dikongsi. Ini memastikan penambahan atau pengurangan yang tepat tanpa syarat perlumbaan atau kerosakan data.
Algoritma Bukan Penyekat: AtomicInteger menyokong arahan compare-and-swap (CAS), menjadikannya sesuai untuk melaksanakan bukan- algoritma menyekat. Algoritma ini mengelakkan penggunaan kunci dan sebaliknya bergantung pada CAS untuk mengendalikan kemas kini serentak dengan cara tanpa kunci.
Contoh Algoritma Tidak Menyekat
Kod berikut coretan menunjukkan penjana nombor rawak tidak menyekat yang dilaksanakan menggunakan AtomicInteger:
public class AtomicPseudoRandom extends PseudoRandom { private AtomicInteger seed; public AtomicPseudoRandom(int seed) { this.seed = new AtomicInteger(seed); } public int nextInt(int n) { while (true) { int s = seed.get(); int nextSeed = calculateNext(s); if (seed.compareAndSet(s, nextSeed)) { int remainder = s % n; return (remainder > 0) ? remainder : remainder + n; } } } // ... }
Dalam contoh ini, kaedah compareAndSet AtomicInteger digunakan untuk melaksanakan operasi CAS pada nilai benih. Gelung berterusan sehingga CAS yang berjaya dilakukan, memastikan bahawa hasil pengiraan benih seterusnya dikembalikan di bawah nilai benih asal, mengelakkan keadaan perlumbaan.
Atas ialah kandungan terperinci Bila dan Bagaimana Menggunakan AtomicInteger untuk Penyegerakan yang Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!