В Java, помимо ключевого слова synchronized, существуют альтернативные способы синхронизации потоков:
Зачем нужен synchronized? Что бы ты использовал для реализации потокобезопасного счётчика вместо synchronized?
В Java, помимо ключевого слова synchronized, существуют альтернативные способы синхронизации потоков:
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
В Java, помимо ключевого слова synchronized, существуют альтернативные способы синхронизации потоков:
- Класс
ReentrantLockиз пакетаjava.util.concurrent.locks— более гибкий механизм блокировки с возможностью попытки захвата блокировки и таймаутом. - Использование
volatileдля обеспечения видимости изменений переменных между потоками (не обеспечивает атомарность). - Классы из пакета
java.util.concurrent, например,Semaphore,CountDownLatch,CyclicBarrier— для более сложной координации потоков. - Методы
wait(),notify(),notifyAll()для взаимодействия потоков через монитор объекта.
Пример с ReentrantLock:
import java.util.concurrent.locks.ReentrantLock;
ReentrantLock lock = new ReentrantLock();
lock.lock();
try {
// критическая секция
} finally {
lock.unlock();
}