1

非常に奇妙な問題が発生しています。2Dの「チェス盤」上を移動する人物のシミュレーションを作成する作業を行っています。各図は、Runnableインターフェイスを実装するオブジェクトによって表されます。問題は、次のように各オブジェクトを異なるスレッドで実行しようとすると、次のようになることです。

    ArrayList< Thread > playerThreads = new ArrayList< Thread >();
    ArrayList< Player > players = p.getSpawnedPlayers(); // This method returns all Runnable objects
    for ( Player pl : players )
        playerThreads.add( new Thread( pl ) );

    for ( Thread pt : playerThreads )
    {
        pt.run();
    }

何らかの理由で、最初のスレッドのみが開始されます。これはかなり確実です。プレーヤークラスのrun()メソッドは次のようになります。

public void run()
{
    System.out.println( "Player " + this.hashCode() + " starts moving..." );
    ...
}

単一のオブジェクトからのみ出力を取得します。ダブルチェックして、両方のArrayListに適切な数のオブジェクトが含まれていることを確認しました。なぜこれが起こっているのか考えていますか?

4

1 に答える 1

9

スレッドを開始するにはpt.start()、ではなく、を呼び出す必要がありpt.run()ます。詳細については、JavaDocを参照してください。

于 2010-11-20T23:05:48.950 に答える