Предполагая, что вы хотите, чтобы цикл делал что-то разумное, вы можете быстрее проверить флаг volatile. Пусть другой поток подождет 15 секунд (или использует таймер), а затем установит его.
В качестве альтернативы, если вы приблизительно знаете, сколько времени займет тело цикла, запустите его, скажем, несколько сотен раз и выполните проверку времени во внешнем цикле.
final long start = System.nanoTime();
do {
for (int i=0; i<200, ++i) {
...
}
} while (System.nanoTime()-start < 15L*1000L*1000L*1000L);
System.nanoTime
должно не запутаться из-за изменений системных часов. Важно использовать длинные буквенные числа.