Как работает ReentrantLock в Java и чем он отличается от synchronized
Ответ: ReentrantLock
из пакета java.util.concurrent.locks
предоставляет расширенные возможности для управления блокировками по сравнению с ключевым словом synchronized
. Он поддерживает попытки блокировки с таймаутом, может быть прерван и позволяет более сложные механизмы синхронизации.
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class ReentrantLockExample {
private final Lock lock = new ReentrantLock();
public void criticalSection() {
lock.lock();
try {
// Доступ к критической секции
System.out.println("Thread " + Thread.currentThread().getName() + " is in the critical section.");
} finally {
lock.unlock(); // Обязательно освобождаем блокировку
}
}
public static void main(String[] args) {
ReentrantLockExample example = new ReentrantLockExample();
Runnable task = example::criticalSection;
Thread thread1 = new Thread(task);
Thread thread2 = new Thread(task);
thread1.start();
thread2.start();
}
}