Sobes.tech
Назад к вопросам
Senior
6

Пессимистичные и оптимистичные блокировки — что это? Как получить пессимистичную блокировку без изменения уровня изоляции?

Компании, где спрашивали
Ecom.tech

Ответ от нейросети

sobes.tech AI

Пессимистичные блокировки предполагают, что конфликт при доступе к данным вероятен, поэтому блокировка берётся сразу при чтении или записи, чтобы предотвратить изменения другими транзакциями.

Оптимистичные блокировки исходят из предположения, что конфликты редки, поэтому данные читаются без блокировок, а проверка на конфликт происходит при попытке записи (например, через версионные номера).

Чтобы получить пессимистичную блокировку без изменения уровня изоляции, можно использовать явные блокировки на уровне SQL-запросов, например, в JDBC:

// Получение пессимистичной блокировки на строку
String sql = "SELECT * FROM table WHERE id = ? FOR UPDATE";
PreparedStatement ps = connection.prepareStatement(sql);
ps.setInt(1, id);
ResultSet rs = ps.executeQuery();

Здесь FOR UPDATE блокирует выбранные строки для других транзакций, не меняя при этом глобальный уровень изоляции транзакции. Это позволяет реализовать пессимистичную блокировку локально для конкретного запроса.