Thread版のclass c に対して、
変数
 volatile int n = 0;
を追加し、run() の
 repaint();

 n = 2;
 repaint();
 n *= 2;
に修正、paint()の先頭に
 n +=3;
を追加、func()のどこかに
 g.drawString("n:" + n, 50, 15);
を追加してみてください。
nはいくらになるでしょうか?

或いは
repaint()を呼び出しているThreadとpaint()が呼ばれているThreadは同一でしょうか?
例えばThread.currentThread().toString()などとすればThreadを識別する為の文字列が得られると思います。

実行環境によって結果が異なる可能性は、ありますね。私はiアプリ端末を持っていませんから実機での確認は出来ませんが・・・・