[ 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
'자바(java) > Socket(TCP-IP)통신' 카테고리의 다른 글
Java.Thread-3. Thread예제-3 (쓰레드 이름) (0) | 2017.02.16 |
---|---|
Java.Thread-3. Thread예제-2 (쓰레드 이름) (0) | 2017.02.16 |
Java.Thread-2. Thread만드는 방법 (0) | 2017.02.16 |
Java.Thread-1. 기본개념 (0) | 2017.02.16 |
Socket(TCP/IP).서버와 클라이언트 코딩 과정 (0) | 2017.02.16 |