Не работают многопоточные коллекции должным образом

PickWick

Знаменитый
Участник
Сообщения
53
Розыгрыши
0
Решения
1
Репутация
0
Реакции
2
Баллы
1 260
Хроники
  1. Interlude
  2. Fafurion
Исходники
Присутствуют
Сборка
acis
Всем привет, первый раз с таким столкнулся.
Адаптирую acis на 166 протокол. Чар бегает, бьет ну вообщем все как надо но есть проблема коллекции которые concurrency (java7+ ) не работают должным образом т.е не добавляются в них обьекты (редко) и не удаляются(всегда).
Если делать обычные Hash мап например и его итератором прогонять на удаление то все гуд работает.
equels и hashcode переопределены.

На acis стандартных все работает, как вот апнул пакетку стала херня какая то. Может кто сталкивался с таким.
 
Вообщем только удаление, remove не работает как надо
 
если добавление/удаление глючит, то видимо что-то все же намудрил с equals/hashcode, коли говоришь их переопределял.
 
Подебажим в недрах коллекций, но интересное что-то произошло. Обычно все гладко)
Java:
@Override
    public String toString()
    {
        return (getClass().getSimpleName() + ":" + getName() + "[" + getObjectId() + "]");
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        WorldObject object = (WorldObject) o;
        return _objectId == object._objectId && _isVisible == object._isVisible && Objects.equals(_name, object._name) && Objects.equals(_position, object._position) && Objects.equals(_region, object._region);
    }

    @Override
    public int hashCode() {
        return Objects.hash(_name, _objectId, _position, _region, _isVisible);
    }
 
Сделал только по object пока что, траблы нет.
Тему можно клоузе
 
Ну в целом логично - ведь та же видимость и позиция в любой момент может поменяться (и регион и имя тоже вполне могут), т.е. для equals это уже другой объект будет, не совпадающий. Так что просто переборщил ты реальнос количеством проверок на идентичность :)
 
Я уж думал что пакетку где то не правильно сделал, оказалось проще):)
 
пакетка и concurrency разные вещи
 
Назад
Сверху Снизу