Parking Lot-LLD
Author: VishnuBhaarathCreated Dec 25, 2025Updated Jun 27, 2026
In parkingLot.java public Optional parkVehicle(Vehicle vehicle) { Optional availableSpot = parkingStrategy.findSpot(floors, vehicle);
if (availableSpot.isPresent()) {
ParkingSpot spot = availableSpot.get();
spot.parkVehicle(vehicle);
ParkingTicket ticket = new ParkingTicket(vehicle, spot);
activeTickets.put(vehicle.getLicenseNumber(), ticket);
System.out.printf("%s parked at %s. Ticket: %s\n", vehicle.getLicenseNumber(), spot.getSpotId(), ticket.getTicketId());
return Optional.of(ticket);
}
System.out.println("No available spot for " + vehicle.getLicenseNumber());
return Optional.empty();
}Won't the above code block provides race condition? Timeline with TWO threads Thread A → findSpot() → Spot S1 (free) Thread B → findSpot() → Spot S1 (still free) Thread A → spot.parkVehicle() → occupies S1 Thread B → spot.parkVehicle() → overwrites
Source: ashishps1/awesome-low-level-design