Digamos que temos a seguinte situação em um aplicativo usando MySQL onde um usuário pode comprar um item e cada item tem um único comprador, mas o preço do item pode mudar.
Pseudo-código :
BEGIN TRANSACTION
seenPrice = SELECT price FROM Item
WHERE id = ABC AND buyer IS NULL
UPDATE Item SET buyer = X
WHERE id = ABC AND buyer IS NULL AND price = seenPrice
COMMIT
A seenPrice
variável e as buyer IS NULL AND price = seenPrice
verificações na instrução UPDATE servem como um meio de bloqueio otimista para garantir que nenhum problema de simultaneidade apareça .
Em um ambiente multi-threaded onde um thread A e um thread B passam pela SELECT
instrução ao mesmo tempo e dizem que o thread A executa a UPDATE
instrução primeiro, a simultaneidade não é uma preocupação , mas é possível que A e B executem a UPDATE
instrução no mesmo tempo exato? Para contextualizar o aplicativo está sendo desenvolvido usando Spring Boot e Spring Data JPA.