Зачем у BufferedReader стоит volatile? Вроде менять его значения никто не собирается и получать новые данные из него.