Saat Anda menggunakan kata kunci tersinkronisasi, mutex digunakan untuk memastikan keamanan thread dan akses sinkron ke sumber daya bersama. Eksekusi terkoordinasi lebih lanjut antar thread seringkali diperlukan untuk menyelesaikan tugas-tugas kompleks secara bersamaan. Misalnya, mode tunggu/beritahu adalah mekanisme eksekusi terkoordinasi dalam lingkungan multi-thread.
Memperoleh dan melepaskan kunci melalui API (menggunakan mutex) atau memanggil wait/notify dan metode lainnya semuanya merupakan metode panggilan tingkat rendah. Selanjutnya, perlu untuk membuat abstraksi tingkat yang lebih tinggi untuk sinkronisasi thread. Kelas bantu sinkronisasi yang umum digunakan adalah untuk merangkum lebih lanjut mekanisme aktivitas sinkronisasi antara dua atau lebih thread. Prinsip internalnya adalah mencapai koordinasi kompleks antar thread dengan menggunakan API dasar yang ada.
Ada 5 kelas pembantu sinkronisasi yang cocok untuk skenario sinkronisasi umum:
1. Semaphore Semaphore adalah alat sinkronisasi klasik. Semaphore sering digunakan untuk membatasi jumlah sumber daya (fisik atau logis) yang dapat diakses oleh suatu thread secara bersamaan.
2.CountDownLatch adalah kelas bantu sinkronisasi yang sangat sederhana namun umum digunakan. Tujuannya adalah untuk mengizinkan satu atau lebih thread diblokir hingga serangkaian operasi yang dilakukan di thread lain selesai.
3. CyclicBarrier adalah titik sinkronisasi multi-arah yang dapat disetel ulang yang berguna dalam skenario pemrograman bersamaan tertentu. Hal ini memungkinkan sekelompok thread untuk menunggu satu sama lain hingga titik penghalang umum tercapai. CyclicBarrier berguna dalam program yang melibatkan sekumpulan thread berukuran tetap yang harus menunggu satu sama lain dari waktu ke waktu. Karena penghalang dapat digunakan kembali setelah benang tunggu dilepaskan, maka disebut penghalang siklik.
4. Phaser adalah penghalang sinkronisasi yang dapat digunakan kembali yang fungsinya mirip dengan CyclicBarrier dan CountDownLatch, tetapi lebih fleksibel dalam penggunaannya. Sangat cocok untuk mengoordinasikan tugas-tugas komputasi bertahap secara sinkron dalam lingkungan multi-thread (ketika sinkronisasi diperlukan antar subtugas dalam kerangka Fork/Join, Phaser lebih disukai)
5.Exchanger memungkinkan dua utas untuk bertukar objek pada titik pertemuan tertentu, yang lebih berguna dalam desain pipa tertentu. Exchanger menyediakan titik sinkronisasi di mana sepasang thread dapat bertukar data. Setiap thread memberikan data ke thread mitranya melalui entri metode exchange(), dan menerima data yang disediakan oleh thread mitranya dan mengembalikannya. Ketika dua thread bertukar objek melalui Exchanger, pertukaran tersebut aman untuk kedua thread. Exchanger dapat dianggap sebagai bentuk SynchronousQueue dua arah, yang lebih berguna dalam aplikasi yang melibatkan algoritma genetika dan desain saluran pipa.