2010-03-14 4 views
0

Java의 스레드에 대해 잘 모르겠습니다. 나는 그것이 실행될 때마다, 그것은 다른 출력을 생성하기 때문에이 코드에 무슨 일이 일어나고 있는지 알고 싶다 : 당신은 초 임의의 숫자에 대한 자고다음 Java 코드의 결과가 매번 다른 이유는 무엇입니까?

public class TwoThreadsDemo{ 
    public static void main(String[] args) 
    { 
     new SimpleThread("Java Programmer").start(); 
     new SimpleThread("Java Programmer").start(); 
    } 
} 

class SimpleThread extends Thread{ 
    public SimpleThread(String str) 
    { 
     super(str); 
    } 

    public void run() 
    { 
     for (int i=0;i<10;i++) 
     { 

      System.out.println(i + " " + getName()); 

      try 
      { 
       sleep((long)(Math.random()*1000)); 
      } 
      catch(InterruptedException e) 
      { 

      } 

     } 
     System.out.println("Done!" + getName()); 
    } 

} 

답변

2

.

sleep((long)(Math.random()*1000)); // Because of this. 

편집 : 자세한 내용을 설명하기 위해, 당신은 실행할 때마다 그것은 초 임의의 숫자에 대한 잔다. 따라서 첫 번째 스레드는 두 번째 스레드 전에 다섯 번 깨어날 수 있습니다. 다른 실행에서는 두 번째 스레드가 첫 번째 스레드 전에 두 번 깨어날 수 있습니다.

+1

나는 본다. 따라서 그 동안 두 번째 스레드가 실행을 시작한 다음 다시 잠자기가 실행됩니다. 첫 번째 스레드는 이전의 스레드에서 계속됩니다. 그게 무슨 일 이니? 설명 해주십시오 –

관련 문제