Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Java (https://forum.zone-game.info/forumdisplay.php?f=126)
-   -   Анализ доступа к ArrayList (https://forum.zone-game.info/showthread.php?t=19022)

hex1r0 05.04.2012 11:53

Re: Анализ доступа к ArrayList
 
я не знаю что у тебя этот класс делает и что хранится _normalSkillTree и где используется/изменяется, если там статика, а ты достаешь оттуда лист и потом его модифицируешь, конечно будет конкурентка и еще куча левых багов

ALF. 05.04.2012 12:23

Re: Анализ доступа к ArrayList
 
Цитата:

Сообщение от hex1r0 (Сообщение 175767)
я не знаю что у тебя этот класс делает и что хранится _normalSkillTree и где используется/изменяется, если там статика, а ты достаешь оттуда лист и потом его модифицируешь, конечно будет конкурентка и еще куча левых багов

Код:

        private static TIntObjectHashMap<List<SkillLearn>> _normalSkillTree = new TIntObjectHashMap<List<SkillLearn>>();

hex1r0 05.04.2012 12:27

Re: Анализ доступа к ArrayList
 
сделай как я выше написал, должно помочь

ALF. 05.04.2012 12:44

Re: Анализ доступа к ArrayList
 
В общем всем спасибо.
Психонул, сделал ConcurrentHashMap :bz:

hex1r0 05.04.2012 13:06

Re: Анализ доступа к ArrayList
 
при чем там хешмап, если ошибка в листе

VISTALL 05.04.2012 13:41

Re: Анализ доступа к ArrayList
 
оффтоп:
Свернуть ↑Развернуть ↓

bloodshed 05.04.2012 14:59

Re: Анализ доступа к ArrayList
 
Цитата:

Сообщение от hex1r0 (Сообщение 175153)
тут видимо ошибка в алгоритме (это при условии что _normalSkillTree должна хранить/хранит статические данные)

PHP код:

public Collection<SkillLearngetAvailableAllSkills(Player player)
    {
        final 
Collection<SkillLearnskills;
        
// тут ошибка видимо
        // skills = _normalSkillTree.get(player.getActiveClassId());
        
skills = new ArrayList<>(_normalSkillTree.get(player.getActiveClassId()));
        if (
player.isAwaking()) 


тут как раз то, что тебе нужно.
у тебя же ошибка:
ты берёшь ArrayList из _normalSkillTree, он у тебя один для всех игроков с одним classId по ходу и зачем то туда добавляешь потом скилы, по этому и выходит: тут ты добавляешь, а в другом потоке бежишь по коллекции и у тебя вылазит ConcurrentModificationException. Создавай для таких манипуляций отдельный список.

hex1r0 05.04.2012 15:15

Re: Анализ доступа к ArrayList
 
причем конкурентка тут еще не самое страшное, а страшное то, что у персов будет по 100500 скилоф :D

ALF. 05.04.2012 16:35

Re: Анализ доступа к ArrayList
 
Про ConcurrentHashMap - протупил)
Просто в другой сборке такое увидел, вот она меня и сбила с толку)

Точнее там FastList.setShared

Добавлено через 2 минуты
Цитата:

Сообщение от bloodshed (Сообщение 175814)
тут как раз то, что тебе нужно.
у тебя же ошибка:
ты берёшь ArrayList из _normalSkillTree, он у тебя один для всех игроков с одним classId по ходу и зачем то туда добавляешь потом скилы, по этому и выходит: тут ты добавляешь, а в другом потоке бежишь по коллекции и у тебя вылазит ConcurrentModificationException. Создавай для таких манипуляций отдельный список.

Благодарю)

n3k0nation 06.04.2012 01:18

Re: Анализ доступа к ArrayList
 
Цитата:

Сообщение от ALFOS (Сообщение 175834)
Про ConcurrentHashMap - протупил)
Просто в другой сборке такое увидел, вот она меня и сбила с толку)

Точнее там FastList.setShared

Javadoc используемых фреймворков читать не пробовали?
P.S: ваша версия javolution безбожно устарела, обновитесь.


Текущее время: 02:11. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot