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