Есть такая инициализация поля класса
if (thread == null) {
synchronized(this) {
if (thread == null) {
thread = new Thread(this, getClass().getName());
thread.run();
}
}
}
Т.е. вначале без всяких блокировок проверяем проинициализированно поле или нет. Если нет, тогда входим в критическую секцию, проверяем еще раз (на тот случай, если поле уже успело проинициализироваться) и создаем объект.
Вопрос, нужно ли поле thread объявлять с модификатором volatile? Все модификации этого поля идут внутри блоков synchronized(this)