По поводу
@Volatile я изучил несколько статей и вынес следующее:
1) volatile переменная потокобезопасна только при атомарных операциях над ней из разных потоков, ЕСЛИ только 1 тред меняет ее, а остальные только читают
2) она должна быть одна помеченная как volatile на весь класс
И еще что чтение\присваивание с 64 битовыми long \ double становятся атомарными если переменная volatile
и все это может не работать при определенных имплементациях jvm