TimerでもThreadでもどっちでもいいよ。

私は、
long a, b;
while (true) {
 a = System.currentTimeMillis() + 50;
     /*ゲームの処理 */
 b = System.currentTimeMillis();
 if (b < a) {
  try { Thread.sleep(b - a) } catch (Exception e) {}
 }
}
ってやってるけど、
currentTimeMillisの精度も機種によって違うんだよねえ…

>>339は正しいよ。