Нельзя так просто взять и работать с одной переменной из нескольких потоков.
Главный вопрос - какое значение прочитает операция 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, убрать дублирование кода, любить жизнь и не унывать.