- 스레드 상태 제어

 : 스레드의 상태를 변경하는 것. -> 정교한 스레드 상태 제어가 필요 

 

1. interrupt() : 

일시 정지 상태의 스레드에서 interruptedException 예외를 발생시켜, 예외처리코드(catch)에서 실행 대기상태 or 종료 상태로 갈 수 있도록 함 
미래에 일시 정지 상태가 되면/ 일시 정지일 때 interrupt() 발생 시켜면 예외 발생

 
2. nofify() / notifyAll()

 : 동기화 블록 내에서 wait() 메소드에 의해 일시 정지 상태 스레드 -> 실행 대기 상태로 

 

3. wait() / wait(long millis)

 : 동기화 블록 내에서 스레드를 일시 정지 상태로 만듬. 매개값으로 주어진 시간 지나면 자동적으로 실행 대기 상태 됨. 시간 없을 시 nofify() 통해 실행 대기 상태로 갈 수 있음 

 

4. resume() 

: suspend() 메소드에 의해 일시 정지 상태 스레드 -> 실행 대기 상태로 

 

5. suspend()

 : 스레드가 일시 정지 상태로 만듬. resume() 메소드 호출하면 다시 실행 대기 상태로 됨 

 

6. sleep(long millis) 

: 주어진 시간 동안 스레드를 일시 정지 상태로 만든다. 시간 지나면 자동으로 실행 대기 상태

 ex)Thread.sleep(1000); -> 1초 잠듬 

 

7. join() /join(long millis) 

: join() 메소드 호출한 스레드는 일시 정지 상태. 실행 대기 상태로 갈려면 join() 메소드를 멤버로 갖는 스레드가 종료 되거나 매개값으로 주어진 시간 지나야 함 
계산을 다 마친 후 값을 가져와야 하는 경우. 다른 스레드의 종료를 기다렸다가 실행해야 하는 경우 

 

8. yield()

 : 실행 중 우선순위 동일한 다른 스레드에게 실행 양보하고 실행 대기 상태가 됨 -> 반복문 많이 실행하는데 무의미한 반복 계속 될 때 다른 스레드에게 양보하고 자신이 실행 대기 상태 가는 것 -> 성능에 도움됨 

 

9. stop() 

: 스레드 즉시 종료 -> 경우에 따라 실행 중인 스레드 종료할 필요가 있다. ex) 동영상 끝까지 안보고 멈춤 요구할 경우 

 


** 경우에 따라 교대 작업이 필요한 경우, 자신의 작업이 끝나면 상대방 스레드 일시 정지 상태 풀어주고, 자신은 일시정지 상태로 만든다 -> 공유 객체 때문    

 

 


 

 

- 공유 객체는 두 스레드가 작업할 내용을 각각 동기화 메소드로 구분해 놓고, 한 스레드 작업 완료하면 notify() 메소드 호출해 일시 정지 있는 다른 메소드 실행 대기 상태로 만들고, 자신은 두번 작업하지 않기 위해 wait()으로 일시 정지 상태 만듦.

 
- notify() : wait()로 인해 일시 정지된 스레드 중 한 개를 실행 대기로 만든다

 
- notifyAll() : wait()으로 일시 정지된 모든 스레드를 실행 대기 상태로 만든다 

 

* 이 메소드들은 Object 클래스에 선언된 메소드 이므로 모든 공유 객체에서 호출 가능. but,동기화 메소드 또는 블록 내에서만 사용 가능 

 

 


 



- 데몬 스레드 

: 주 스레드의 작업을 돋는 보조적인 역할을 수행하는 보조 스레드. 
주 스레드 종료되면 강제적으로 자동 종료 됨. 

ex) 미디어 플레이어의 영상/음악 재생(데몬 스레드), 미디어 플레이어(주 스레드)

 

 

- 스레드 그룹 : 관련된 스레드를 묶어서 관리할 목적으로 이용 

- 스레드 풀 

: 병렬 작업 처리가 많아지면 스레드 개수가 증가되고 그에 다른 스레드 생성과 스케줄링으로 인해 cpu가 바빠져 메모리 사용량이 늘어남. -> 성능 저하 
스레드 풀은 작업 처리에 사용되는 스레드를 제한된 개수만큼 정해놓고 큐에 들어오는 작업들을 하나씩 스레드가 맡아서 처리. 작업처리가 끝난 스레드는 다시 작업 큐에서 새로운 작업 가져와 처리 
-> 작업 처리 요청 폭등해도 스레드의 전체 개수가 늘어나지 않으므로 성능 급격히 저하되지 않는다. 

 

 

-<이것이 자바다1>. 한빛 미디어 

'JAVA' 카테고리의 다른 글

멀티 스레드 예제_join()  (0) 2019.06.19
멀티 스레드 예제_BeepThread  (0) 2019.06.19
멀티 스레드_4  (0) 2019.06.19
멀티 스레드_3  (0) 2019.06.19
멀티 스레드_2  (0) 2019.06.18

+ Recent posts