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


1. 소스 목록 : ThreadMain.java

                ThreadExe1.java

                ThreadExe2.java


2. ThreadMain.java

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

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

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


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

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

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

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


4. 수행결과

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

   - ThreadExe1, ThreadExe2 instance생성 후 start()에 의해서 run()메소드 수행

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

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

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

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

   - th1.sleep(3000);가 있기 때문에 쓰레드 instance2개가 먼저 종료되고, 메인쓰레드가 종료 된다.

   - 만약,  th1.sleep(3000); 가 없다면 메인쓰레드가 먼저 종료 된다.


5. ThreadMain.java


6. ThreadExe1.java

7. ThreadExe1.java

8. 수행결과


Posted by 농부지기
,