Модификатор volatile
В Java модификатор volatile используется, чтобы позволить знать JVM, что поток доступа к переменной всегда должен объединять свою собственную копию переменной с главной копией в памяти.
Доступ к volatile переменной синхронизирует все кэшированные скопированные переменные в оперативной памяти. Ссылка на объект volatile может быть null.
Как правило, run() вызывается в одном потоке, а stop() вызывается из другого потока. Если в строке 1 используется кэшированное значение active, то цикл не может остановиться, пока вы не установите active = false в строке 2.