Você já tentou comprar o último ingresso pro filme mais hypado do ano, viu a mensagem "Reserva Confirmada", mas na hora do pagamento o sistema disse que o assento estava ocupado? Pois é. A vida de quem desenvolve sistemas de reserva é exatamente assim, mas no lugar do usuário frustrado, nós temos transações concorrentes e o temido estado de corrida (race condition). Vamos descobrir como o Spring Boot resolve essa briga usando Optimistic e Pessimistic Locking, com aquele case clássico de reserva de assentos de cinema. 🎟️

Imagina que temos uma tabela SeatDetails com o campo isBooked (status do assento). Se 100 pessoas tentarem marcar o assento A1 ao mesmo tempo, sem controle, várias vão ler "disponível" e tentar atualizar ao mesmo tempo. Resultado: sobreposição de dados, ticket vendido duas vezes e uma baita dor de cabeça.

Aí entram os Locking Strategies para garantir que a venda seja atômica e consistente.

O otimista não segura a porta. Ele deixa todo mundo tentar, mas na hora de finalizar, ele confere se alguém passou na frente.

Como funciona?