2012-08-08 2 views
0

Java에서 MULTITHREADING에 대해 배우고 있는데 다음 코드에서 start 메소드가 실행될 때 하위 스레드가 즉시 실행되지 않는 이유를 알고 싶습니다. 자식 스레드?java multithreading - 하위 스레드가 즉시 시작되지 않음

대신 start 메소드를 실행 한 후 주 스레드는 코드를 계속 실행하고 "."인쇄를 시작합니다. 그것은 세 번하고 통제는 자식 스레드에 의해 수행됩니다. 그런 다음 하위 스레드는 해당 코드를 한 번 실행하고 주 스레드로 되돌아갑니다. 그런 다음 주 스레드가 완료되고 하위 스레드가 실행을 완료합니다.

왜 이러한 일이 발생하는지 이해할 수 없습니까?

class MyThread implements Runnable { 

    String thrdName; 

    MyThread(String name) { 
     thrdName = name; 
    } 

    public void run() { 
     System.out.println(thrdName + " starting."); 
     for (int count = 0; count < 10; count++) { 
      System.out.println("In " + thrdName + ", count is " + count); 
     } 
    } 
} 

class UseThreads { 

    public static void main(String args[]) { 
     System.out.println("Main thread starting."); 
     MyThread mt = new MyThread("Child #1"); 
     Thread newThrd = new Thread(mt); 
     newThrd.start(); 
     for (int i = 0; i < 50; i++) { 
      System.out.print("."); 
     } 
    } 
} 
+0

동시성과 병렬성의 차이점을 알고 있습니까? – oldrinb

+2

@veer ... 아직 아직 – user547453

+0

@ user547453 +1 : D – MadProgrammer

답변

2

스레드를 시작하는 호출은 비동기입니다. 반환 전에 스레드가 실행되기 시작할 때까지 기다리지 않습니다. 그것은 본질적으로 즉시 반환됩니다.

당신은 시작한 스레드가 어떤 종류의 시그널을 발급 할 때까지 주 스레드가 멈추도록 잠그기 만하면 그 동작을 직접 구현할 수 있습니다.

4

스레드에서 start()을 호출하면 스레드가 시작되는 속도가 보장되지 않습니다. 이것은 컴퓨터의 스레드 스케줄러에 달려 있습니다. 코드를 여러 번 실행하면 스레드에 대해 여러 가지 실행 순서가 표시됩니다.