Собственно говоря, вопрос, объясните пожалуйста или ткните, где можно про это почитать, почему если поместить в начале метода run() пустой блок synchronized, а потом весь остальной код по заданию, оно срабатывает так, как надо? P.S. Догадываюсь, что пустой блок синхронизации играет роль метода yield, и потому программа компилируется.