private void handleLinkLeaveEvent(LinkLeaveEvent ev) { Map<Id<Person>, Monitor> toRemove = new HashMap<>(); LinkLeaveEvent event = ev; Id<Person> driverId = this.getDriverOfVehicle(event.getVehicleId()); Gbl.assertNotNull(driverId); Monitor monitor = monitors.get(ExitedLink).get(driverId); if (monitor != null) { if (monitor.getAgentId().equals(event.getDriverId()) && monitor.getLinkId().equals(event.getLinkId())) { if (monitor.getHandler().handle(monitor.getAgentId(), monitor.getLinkId(), monitor.getEvent())) { toRemove.put(driverId,monitor); } } } synchronized (monitors.get(ExitedLink)) { monitors.get(ExitedLink).entrySet().removeAll(toRemove.entrySet()); } }