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
In parkingLot.java
public Optional parkVehicle(Vehicle vehicle) {
Optional availableSpot = parkingStrategy.findSpot(floors, vehicle);
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