Во-первых, вопросы синхронизации никогда не являются "идиотскими" вопросами.
Я тоже потратил некоторое время на просмотр этого кода, но все еще не уверен на 100%, что он полностью правильный.
Основная причина иметь synchronized
блок здесь предназначен для защиты следующих двух методов от выполнения не по порядку:
loader.setPrefix(prefix);
...
template = handlebars.compile(basename);
Видите ли, Handlebars имеет ссылку на загрузчик:
loader = new Loader(vertx);
...
handlebars = new Handlebars(loader);
Возможный сценарий без блока синхронизации будетбыть
T1 sets prefix to A and switches
T2 sets prefix to B and switches
T1 compiles template with prefix set to B, while thinking it's still A