設計は同じ前提の比較なんだよ。
このソース見てから577読むと納得出来ないかなぁ。
イヤ勘違いなら申し訳ないけど。

1. の場合のソース
class MyApp extends IApplication {
  public void start() { // ←スレッドB
    MyCanvas canvas = new MyCanvas();
    canvas.run();
  }
}
class MyCanvas extends Canvas {
  public void run() {
    while() { /* ゲームループ */ }
  }
}
2. の場合のソース
public class MyApp extends IApplication {
  public void start() { // ←スレッドB
    MyCanvas canvas = new MyCanvas();
    Thread thread = new Thread( canvas ); // ←スレッドC
    thread.start();
  }
}
class MyCanvas extends Canvas implements Runnable {
  public void run() {
    while() { /* ゲームループ */ }
  }
}