Java menyediakan kunci dan penyegerak untuk mengurus akses kepada sumber yang dikongsi. Kunci seperti ReentrantLock membenarkan hanya satu utas untuk mengakses bahagian kritikal pada satu masa, manakala penyegerak seperti Semaphore dan CountDownLatch menyediakan kawalan serentak yang lebih fleksibel, seperti mengehadkan bilangan utas yang mengakses sumber secara serentak atau menunggu semua utas menyelesaikan tugas mereka . Menggunakan mekanisme ini dengan berkesan boleh mengelakkan perlumbaan data dan meningkatkan prestasi aplikasi.
Kunci dan Penyegerak dalam Pengaturcaraan Serentak Java
Pengaturcaraan serentak membolehkan berbilang urutan dilaksanakan secara serentak, tetapi memerlukan mekanisme untuk mengurus akses kepada sumber yang dikongsi. Java menyediakan pelbagai kunci dan penyegerak untuk mencapai matlamat ini.
Kunci
Kunci membenarkan hanya satu utas untuk mengakses bahagian kritikal (bahagian yang diubah suai daripada sumber yang dikongsi) pada satu masa. Kunci yang biasa digunakan ialah:
// 创建一个 ReentrantLock Lock lock = new ReentrantLock(); // 获取锁 lock.lock(); // 访问临界区 // ... // 释放锁 lock.unlock();
Penyegerak
Penyegerak lebih maju daripada kunci dan menyediakan kawalan serentak yang lebih fleksibel. Penyegerak yang biasa digunakan ialah:
Semaphore
Semaphore mengehadkan bilangan utas yang boleh mengakses sumber pada masa yang sama.
// 创建一个 Semaphore,允许最多 3 个线程同时访问 Semaphore semaphore = new Semaphore(3); // 申请许可证 semaphore.acquire(); // 访问临界区 // ... // 释放许可证 semaphore.release();
CountDownLatch
CountDownLatch menunggu semua urutan menyelesaikan tugas mereka sebelum meneruskan.
// 创建一个 CountDownLatch,等待 10 个线程完成 CountDownLatch latch = new CountDownLatch(10); // 10 个线程执行任务 // ... // 每个线程完成后,计数器减一 latch.countDown(); // 主线程等待所有线程完成 latch.await();
Kes praktikal
Berikut ialah kes praktikal operasi akaun bank, menggunakan Semaphore untuk mengehadkan bilangan utas yang mengakses akaun pada masa yang sama:
class BankAccount { private Semaphore semaphore = new Semaphore(1); private double balance; public void deposit(double amount) { try { semaphore.acquire(); balance += amount; } finally { semaphore.release(); } } public void withdraw(double amount) { try { semaphore.acquire(); balance -= amount; } finally { semaphore.release(); } } }
Kesimpulan
Kunci dan penyegerak digunakan mengurus akses kepada sumber yang dikongsi dalam alat berkuasa pengaturcaraan serentak Java. Dengan menggunakan mekanisme ini dengan berhati-hati, anda boleh mengelakkan perlumbaan data dengan berkesan dan meningkatkan prestasi program.
Atas ialah kandungan terperinci Bagaimana untuk menggunakan kunci dan penyegerak dalam pengaturcaraan serentak Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!