Skip to content

Parking Lot-LLD #177

@VishnuBhaarath

Description

@VishnuBhaarath

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions