diff --git a/src/main/java/eu/ztsh/lfr/core/impl/TemperaturesServiceImpl.java b/src/main/java/eu/ztsh/lfr/core/impl/TemperaturesServiceImpl.java index 260744f..fa350fa 100644 --- a/src/main/java/eu/ztsh/lfr/core/impl/TemperaturesServiceImpl.java +++ b/src/main/java/eu/ztsh/lfr/core/impl/TemperaturesServiceImpl.java @@ -11,35 +11,32 @@ import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; import java.util.List; +import java.util.concurrent.atomic.AtomicReference; @Service public class TemperaturesServiceImpl implements TemperaturesService { private static final Logger log = LoggerFactory.getLogger(TemperaturesServiceImpl.class); - private Averages averages; + private final AtomicReference averages = new AtomicReference<>(); @Nonnull @Override - public List getTemperaturesFor(String city) { - synchronized (this) { - while (averages == null) { - try { - wait(); - } catch (InterruptedException e) { - log.error("Thread was interrupted", e); - Thread.currentThread().interrupt(); - } + public synchronized List getTemperaturesFor(String city) { + while (averages.get() == null) { + try { + wait(); + } catch (InterruptedException e) { + log.error("Thread was interrupted", e); + Thread.currentThread().interrupt(); } - return averages.get(city); } + return averages.get().get(city); } @EventListener(FileProcessedEvent.class) - public void updateTemperatures(FileProcessedEvent event) { - synchronized (this) { - averages = event.averages(); - notifyAll(); - } + public synchronized void updateTemperatures(FileProcessedEvent event) { + averages.set(event.averages()); + notifyAll(); } }