[ Java.Thread-3. Thread예제-2 ]


1. 소스 목록 : ThreadMain.java

                DigetThread.java

                AlphaThread.java


2. ThreadMain.java

   - 쓰레드를 상속받지 않았지만 메인 쓰레드가 된다.

   - DigetThread, AlphaThread의 instance를 생성 후 start()하게 되면   run()메소드가 수행된다.

     Thread를 상속받은 instance diget, alpha는 메인쓰레드와 관계 없이 각 각 별도로 수행된다.


   - 쓰레드 instance를 수행(start, run) 후 diget.sleep(1000);를 하게 되면 

     소스상으로 보면 diget이 1초 멈춤효과를 내야하지만  diget이 계속 수행되는걸 알 수 있다.

     >> 그 이유는 sleep()이 항상 현재 실행중인 쓰레드에 대해 작독하기 때문에 diget.sleep(1000)과 같이 호출하였어도 실제 영향을 받는 것은 main메서드를 실행하는 메인쓰레드가 된다.

         그래서 sleep()은 static으로 선언되어 있으며 참조변수를 이용해서 호출하기 보다는 Thread.sleep(1000);을 해야 한다.


4. 수행결과

   - main()에 의해서 메인쓰레드가 수행

   - DigetThread, AlphaThread생성 후 start()에 의해서 run()메소드 수행

     이때 DigetThread, AlphaThread의 실행순서, for문  실행순서는 매번 달라진다.

     이 부분은 JVM에 따라 언제든 달라진다.

     이때문에 반드시 Thread 프로그램들은 서로 관여하지 않는 프로그램을 작성해야 된다.

   - diget.sleep(1000); 에 의해서 메인쓰레드는 1초간 정지 (Thread.sleep(1000); 과 동일함)

   - alpha.sleep(1000); 에 의해서 메인쓰레드는 1초간 정지 (Thread.sleep(1000); 과 동일함)

 

5. ThreadMain.java


6. DigetThread.java

7. AlphaThread.java


8. 수행결과


Posted by 농부지기
,