Size: a a a

StartAndroid Ru Chat

2020 November 20

VV

Vladimir Vartanyan in StartAndroid Ru Chat
да вот не получается повторить так то получается просто экспериментировать на проде вылечилось или нет типа
источник

VV

Vladimir Vartanyan in StartAndroid Ru Chat
Vladyslav Lozytskyi
как минимум при текущей Вашей реализации рискуете нарваться на ConcurrentModificationException
ConcurrentHashMap используется
источник

VV

Vladimir Vartanyan in StartAndroid Ru Chat
удаляется по типу удали из стека если есть в нем, а если нет игнор
источник

VL

Vladyslav Lozytskyi in StartAndroid Ru Chat
ConcurrentHashMap при чтении дублируется, т.е. если в этот момент в него что-то добавить, то при чтении Вы не увидите что было что-то добавлено
источник

VV

Vladimir Vartanyan in StartAndroid Ru Chat
сразу после ответа запроса
источник

VL

Vladyslav Lozytskyi in StartAndroid Ru Chat
Я бы это как-то через синхронизацию рулил бы
источник

VL

Vladyslav Lozytskyi in StartAndroid Ru Chat
Но я не знаю Вашей архитектуры
источник

VV

Vladimir Vartanyan in StartAndroid Ru Chat
Vladyslav Lozytskyi
ConcurrentHashMap при чтении дублируется, т.е. если в этот момент в него что-то добавить, то при чтении Вы не увидите что было что-то добавлено
ухты
источник

VV

Vladimir Vartanyan in StartAndroid Ru Chat
вот это похоже на причину (при чтении дублируется)
источник

VV

Vladimir Vartanyan in StartAndroid Ru Chat
потому что все баги именно в рамках милисекунд
источник

VL

Vladyslav Lozytskyi in StartAndroid Ru Chat
Concurrent призван избавить Вас от проблем многопоточности в коллекциях, но никак не синхронизации)
источник

VL

Vladyslav Lozytskyi in StartAndroid Ru Chat
Сам им не пользуюсь, так как это потенциальный источник багов
источник

VL

Vladyslav Lozytskyi in StartAndroid Ru Chat
Тупо через mutexы делаю
источник

VV

Vladimir Vartanyan in StartAndroid Ru Chat
@Synchronized
   override fun execute(act: Act) {
       return when {
           mapDisposable.contains(act.id) -> when (act.strategy) {
               KillMe -> {
                   stop(act.id)
                   startExecution(act)
               }
               SaveMe -> log("${act.id} - Act duplicate")
           }
           else -> startExecution(act)
       }
   }
источник

VV

Vladimir Vartanyan in StartAndroid Ru Chat
mapDisposable.contains дергается только в этом методе
источник

VV

Vladimir Vartanyan in StartAndroid Ru Chat
стратегия всегда SaveMe
источник

VV

Vladimir Vartanyan in StartAndroid Ru Chat
типа только в лог кидай
источник

VV

Vladimir Vartanyan in StartAndroid Ru Chat
если повтор
источник

VL

Vladyslav Lozytskyi in StartAndroid Ru Chat
startExecution, случаем, не асинхронный? если так, то Вы синхронизировали только запуск, а не выполнение
источник

VV

Vladimir Vartanyan in StartAndroid Ru Chat
startExecution асинхронный
источник