Movie booking is the standard question about many users fighting over the same limited items. It teaches you to keep seat status per show, hold seats briefly while the user pays, and make the lock all or nothing so no seat is sold twice. The same ideas apply to flight, hotel and event booking. The common trap is relying on Java's synchronized, which only works on one server; the real lock must live in the database or a shared store.