fix: Synchronization fixes in temperature service

This commit is contained in:
Piotr Dec 2024-07-19 01:01:00 +02:00
parent d5d51869df
commit 07d3e4a2a3
Signed by: stawros
GPG key ID: F89F27AD8F881A91

View file

@ -11,18 +11,18 @@ 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> averages = new AtomicReference<>();
@Nonnull
@Override
public List<Average> getTemperaturesFor(String city) {
synchronized (this) {
while (averages == null) {
public synchronized List<Average> getTemperaturesFor(String city) {
while (averages.get() == null) {
try {
wait();
} catch (InterruptedException e) {
@ -30,16 +30,13 @@ public class TemperaturesServiceImpl implements TemperaturesService {
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();
public synchronized void updateTemperatures(FileProcessedEvent event) {
averages.set(event.averages());
notifyAll();
}
}
}