Задать вопрос
@nikit-cpp-007

Почему переменные в анонимном классе потока не успевают инициализироваться?

... для этого в строке 19 я добавил ожидание, если переменная player не успела проинициализироваться.
pastebin.com/TbFP6wmy

Как такое поведение называется? Как с ним бороться / не наступить на эти грабли в будущем?

UPD код класса:
https://github.com/nikit-cpp/VkCachingPlayer/blob/...
UPD2: выходит что все переменные класса, к которым возможен доступ из нескольких потоков надо помечать volatile?
  • Вопрос задан
  • 253 просмотра
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Java-разработчик с нуля
    12 месяцев
    Далее
  • Академия Эдюсон
    Java-разработчик: тариф Базовый
    8 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Java-разработчик + ИИ
    9 месяцев
    Далее
Решения вопроса 1
angry_cellophane
@angry_cellophane
Нельзя так просто взять и работать с одной переменной из нескольких потоков.
Главный вопрос - какое значение прочитает операция read?
Где узнать про это больше:
1. Классика жанра - Java concurrency in practice. Brian Goetz.
2. Прагматика Java memory model
3. Что такое memory model.
3. Сама Java memory model (не для слабонервных)
4. Хороший пост на хабре
5. ...
6. PROFIT!

PS: В CustomPlayer много проблем и не только с многопоточностью. Практические советы: не создавать потоки руками (смотреть ExecutorService - пул потоков), не оставлять пустые catch блоки (хотя бы в логгер записать ошибку), соблюдать java naming conventions, убрать дублирование кода, любить жизнь и не унывать.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
programmerjava
@programmerjava
ну вообще-то я вижу в коде переменная эта разделяемая...
нужно больше кода. в том числе объеявление класса этого объекта :)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Казань
от 75 000 ₽
ИТРУМ Ростов-на-Дону
от 75 000 ₽
Яндекс Москва
от 180 000 до 350 000 ₽