Mekanisme kunci konkurensi Java memastikan sumber yang dikongsi hanya diakses oleh satu utas dalam persekitaran berbilang benang. Jenisnya termasuk penguncian pesimis (peroleh kunci dan kemudian akses) dan penguncian optimistik (semak konflik selepas mengakses). Java menyediakan kelas kunci konkurensi terbina dalam seperti ReentrantLock (kunci mutex), Semaphore (semaphore) dan ReadWriteLock (kunci baca-tulis). Menggunakan kunci ini boleh memastikan akses selamat benang kepada sumber yang dikongsi, seperti memastikan bahawa apabila berbilang rangkaian mengakses pembilang pembolehubah dikongsi pada masa yang sama, hanya satu utas mengemas kini nilainya. . Untuk mengelakkan ini, Java menyediakan mekanisme kunci konkurensi, yang memastikan bahawa hanya satu utas mengakses sumber yang dikongsi pada satu masa.
Jenis kunci konkurensi
Terdapat dua jenis kunci konkurensi di Jawa:
Kunci Pesimis: Diandaikan bahawa semua rangkaian akan mengakses sumber dikongsi, jadi kunci diperoleh sebelum mengakses sumber yang dikongsi. Ini mengakibatkan penukaran konteks yang lebih kerap, tetapi pada kos penyelarasan yang lebih rendah.
Kunci Optimistik:Anggap bahawa kebanyakan utas tidak akan mengakses sumber kongsi, jadi konflik disemak hanya selepas mengakses sumber kongsi. Jika konflik berlaku, operasi akan dibatalkan. Ini menyebabkan lebih sedikit suis konteks, tetapi pada kos konflik yang lebih mungkin. .
Semaphore:Semaphore mengira digunakan untuk mengawal bilangan maksimum urutan serentak yang mengakses sumber kongsi.
ReentrantLock
untuk mencapai ini: public class Counter { private int counter; private ReentrantLock lock = new ReentrantLock(); public int getCounter() { lock.lock(); try { return counter; } finally { lock.unlock(); } } public void incrementCounter() { lock.lock(); try { counter++; } finally { lock.unlock(); } } }
getCounter()
dan incrementCounter()
menggunakan kunci
untuk memastikan akses kepada counter
selamat untuk thread. Atas ialah kandungan terperinci Penjelasan terperinci tentang kunci serentak berbilang benang Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!