Concurrency issues
Concurrency issues
Race Condition
@Service
@RequiredArgsConstructor
public class StockService {
private final StockRepository stockRepository;
public synchronized void decrease(Long id, Long quantity) {
final Stock stock = stockRepository.findById(id).orElseThrow();
stock.decrease(quantity);
stockRepository.saveAndFlush(stock);
}
}Thread-1
Stock
Thread-2
Java Synchronized
Time
Thread-1
Stock
Thread-2
DataBase Lock
Pessimistic Lock
Optimistic Lock
Named Lock
Redis
Lettuce
Redisson
Finish
Mysql
Redis
Reference
Last updated