Menggunakan AtomicInteger untuk Pengaturcaraan Serentak
AtomicInteger ialah kelas dalam perpustakaan serentak Java yang membenarkan pembolehubah diakses serentak oleh berbilang benang tanpa perlu untuk penyegerakan. Memahami aplikasi praktikal kelas ini adalah penting untuk mengoptimumkan prestasi kod.
Pebilang Atom
Satu kes penggunaan utama untuk AtomicInteger ialah sebagai pembilang atom. Kaedahnya seperti incrementAndGet() dan decrementAndGet() memastikan bahawa berbilang benang boleh menambah dan mengurangkan kiraan tanpa kerosakan data. Ini amat berguna untuk menjejaki pembilang yang dikongsi, seperti kiraan urutan atau statistik.
Banding-dan-Tukar Primitif
AtomicInteger juga menyokong kaedah compareAndSet() , yang secara atom membandingkan nilai semasa pembolehubah kepada nilai jangkaan yang diberikan. Jika nilai sepadan, pembolehubah dikemas kini kepada nilai baharu yang disediakan. Mekanisme banding-dan-tukar ini adalah asas untuk melaksanakan algoritma bukan menyekat.
Algoritma Tidak Menghalang
Algoritma tanpa menyekat mengelakkan penggunaan kunci atau operasi menyekat untuk memastikan keselamatan benang. Sebaliknya, mereka bergantung pada operasi bandingkan-dan-swap untuk mengendalikan kemas kini serentak. Dengan menggunakan kaedah banding-dan-swap AtomicInteger, algoritma bukan penyekat boleh mencapai konkurensi dan skalabiliti yang tinggi tanpa mengorbankan ketepatan.
Contoh: Penjana Nombor Rawak Tidak Menyekat
Contoh biasa menggunakan AtomicInteger untuk algoritma tidak menyekat ialah penjana nombor rawak selamat benang. Pertimbangkan pelaksanaan berikut:
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; } } } }
Penjana nombor rawak tidak menyekat ini menggunakan AtomicInteger untuk mengira dan mengemas kini benih secara atom. Dengan mengelakkan kunci, ia meminimumkan perbalahan benang dan meningkatkan prestasi, terutamanya dalam senario yang sangat serentak.
Atas ialah kandungan terperinci Bagaimanakah AtomicInteger Boleh Meningkatkan Prestasi Pengaturcaraan Serentak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!