>>354です。
答えてくれた方は>>357さんと>>361さんでしょうか?
ありがとうございます。

 ひょっとして、仮にStringBufferがスレッドセーフではなかった場合、
mg1.printLoop(); の行も動くってことでしょうか?
もし、そうであるならば納得できます。
print();が出力されるのは、print()メソッドがsynchronizedされていないから
というのは理解しました。