2010-11-20 9 views
1

매우 이상한 문제가 있습니다. 저는 2 차원 "체스 보드"에서 움직이는 수치 시뮬레이션을 만드는 과제를 수행하고 있습니다. 각 도형은 Runnable 인터페이스를 구현하는 객체로 표현됩니다. 문제는 그 그래서 같이 다른 스레드에서 각 개체를 실행하려고 할 때 : 어떤 이유로, 첫 번째 스레드 starts.And 나는이 꽤 확신, 실행() 메소드에 대한Java에서 다중 스레드 실행

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(); 
    } 

플레이어 클래스는 다음과 같습니다의 :

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

을 나는 단지 object.I이 doublechecked 두 ArrayLists 개체의 오른쪽 숫자를 포함하는지 확인 만든 하나의 출력을 얻을. 왜 이런 일이 발생하는지 알고 싶습니다.

답변

9

스레드를 시작하려면 pt.run()이 아니라 pt.start()으로 전화해야합니다. 모든 세부 사항은 JavaDoc을 참조하십시오.

+0

* facepalm * 나는 그것이 올바른 방법 이었다는 것을 완전히 잊어 버렸습니다. 샐리 : –

+0

대답을 잊지 말것. Emil D. –

+0

너무 빨리 내 의견을 말할 때 그럴 수 없었다. 내가 가정 한 질문을 게시했습니다. –