Состояние гонки Hazelcast?JAVA

Программисты JAVA общаются здесь
Anonymous
Состояние гонки Hazelcast?

Сообщение Anonymous »

Мы запускаем кластер Hazelcast из трех машин, на каждой из которых имеется один и тот же экземпляр процесса. Среди прочих у них есть общий IMap с именем waitingMap. В методе activateAnotherBatch() мы проверяем пустоту карты. Если карта не пустая, то вызываем какой-то метод на карте.
Я бы сделал эту конструкцию нормально синхронизированной, если бы разрабатывал на одной машине. Однако синхронизация работает только для каждого процесса/машины, и теперь у нас есть 3 машины.
Безопасно ли это, или другие машины могут очистить карту после проверки на пустость и до вызов waitMap.entrySet().iterator().next(), что вызывает исключение?
Если да, то как я могу решить эту проблему, чтобы он безопасно работает на N машинах?
public Scheduler(HazelcastInstance hci) {
waitingMap = hci.getMap(CMDS_WAITING);
}

private void activateAnotherBatch() {
if (waitingMap.isEmpty())
return;

var batchNr = waitingMap.entrySet().iterator().next().getValue();
waitingMap.forEach((k,v) -> {
if (v.equals(batchNr))
addCmdNr(k, batchNr, Prio.NORMAL);
});
}

private ConcurrentMap waitingMap;


Подробнее здесь: https://stackoverflow.com/questions/787 ... -condition

Вернуться в «JAVA»