fix: Synchronization fixes in temperature service
This commit is contained in:
parent
d5d51869df
commit
07d3e4a2a3
1 changed files with 13 additions and 16 deletions
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue