Запуск нескольких потоков в Java - PullRequest
1 голос
/ 21 ноября 2010

У меня очень странная проблема. Я работаю над заданием, которое включает построение симуляции фигур, движущихся на 2-й "шахматной доске". Каждая фигура представлена ​​объектом, реализующим интерфейс 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..." );
    ...
}

Я получаю вывод только от одного объекта. Я дважды проверил и убедился, что оба ArrayLists содержат правильное количество объектов. Есть идеи, почему это происходит?

1 Ответ

9 голосов
/ 21 ноября 2010

Чтобы начать обсуждение, вы должны позвонить pt.start(), а не pt.run(). См. JavaDoc для всех деталей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...