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