ReentrantLock

Ketentuan - menerapkan ketentuan dalam kunci memungkinkan Anda mencapai kontrol atas pengelolaan akses ke aliran. Kondisi kunci adalah objek antarmuka Kondisi darijava.util.concurrent.locks. Menggunakan objek Condition dalam banyak hal mirip dengan menggunakanwait/notify/notifyAllkelas Object , yang telah dibahas di salah satu topik sebelumnya.

Kunci adalah antarmuka darikerangka kerja kunciyang menyediakan pendekatan fleksibel untuk membatasi akses ke sumber daya/blok dibandingkan dengan yang disinkronkan. Saat menggunakan beberapa kunci, urutan pelepasannya bisa sewenang-wenang, plus itu juga bisa dikonfigurasi. Ada juga kemungkinan untuk menangani situasi saat kunci sudah ditangkap.

ReentrantLock adalah salah satu implementasi dari antarmuka Lock , kelas ReentrantLock . Ini memungkinkan utas yang sama untuk memanggil metode kunci, meskipun telah memanggilnya sebelumnya, tanpa melepaskan kunci.

Kelas ReentrantLock , selain metode antarmuka Lock , memiliki metode pabrik newCondition() . Metode ini mengembalikan objekKondisi, yang memungkinkan Anda untuk menambahkan utas saat ini ke set tunggu dari objek yang diberikanKondisi.

private final Lock R_LOCK = ReentrantLock();
R_LOCK.lock();
try {
   //some action happens here
} finally {
   R_LOCK.unlock();
}

ReadWriteLock adalah antarmuka untuk membuat kunci baca/tulis. Kunci sangat berguna ketika sistem memiliki banyak pembacaan dan sedikit penulisan.

ReentrantReadWriteLock - digunakan dalam layanan dan cache multi-utas, memiliki peningkatan kinerja yang bagus dibandingkan dengan blok yang disinkronkan. Faktanya, kelas bekerja dalam 2 mode yang saling eksklusif: banyak pembaca membaca data secara paralel dan ketika hanya 1 penulis yang menulis data.

ReentrantReadWriteLock.ReadLock - kunci baca untuk pembaca, diperoleh melalui readWriteLock.readLock().

ReentrantReadWriteLock.WriteLock - kunci tulis untuk penulis, diperoleh melalui readWriteLock.writeLock().

Sinkronisasi

AbstractOwnableSynchronizer adalah kelas dasar yang bertanggung jawab untuk membangun mekanisme sinkronisasi. Berisi pengambil/penyetel untuk mengingat dan membaca aliran eksklusif yang dapat beroperasi pada data Anda.

AbstractQueuedSynchronizer adalah kelas dasar untuk mekanisme sinkronisasi di FutureTask, CountDownLatch, Semaphore, ReentrantLock, ReentrantReadWriteLock. Ini juga digunakan saat membuat mekanisme sinkronisasi baru yang mengandalkan nilai int tunggal dan atomik.

AbstractQueuedLongSynchronizer adalah varian dari AbstractQueuedSynchronizer yang mendukung nilai panjang atom.