[ 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
8. 수행결과
'자바(java) > Socket(TCP-IP)통신' 카테고리의 다른 글
Java.Thread-4. Thread Pool-1 (기본개념) (0) | 2017.02.16 |
---|---|
Java.Thread-3. Thread예제-3 (쓰레드 이름) (0) | 2017.02.16 |
Java.Thread-3. Thread예제-1 (기초) (0) | 2017.02.16 |
Java.Thread-2. Thread만드는 방법 (0) | 2017.02.16 |
Java.Thread-1. 기본개념 (0) | 2017.02.16 |