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

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

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

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

UPD код класса:
https://github.com/nikit-cpp/VkCachingPlayer/blob/...
UPD2: выходит что все переменные класса, к которым возможен доступ из нескольких потоков надо помечать volatile?
  • Вопрос задан
  • 249 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 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
ну вообще-то я вижу в коде переменная эта разделяемая...
нужно больше кода. в том числе объеявление класса этого объекта :)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы