CODEDRAGON ㆍDevelopment/Java
스레드 상태제어
· 실행 중인 스레드의 상태를 변경하는 것을 스레드 상태 제어라고 합니다.
· 멀티 스레드 프로그램을 만들기 위해서는 정교한 스레드 상태 제어가 필요합니다. 적절한 상태가 이루어지지 않으면 프로그램은 불안정해지거나 먹통이 되거나 다운됩니다.
· 그래서, 스레드는 잘 사용하면 약이 되지만 잘못 사용하면 치명적인 프로그램의 버그가 됩니다.
· 스레드 제어를 제대로 하려면 스레드의 상태 변화를 일으키는 메소드들을 잘 알아야 합니다.
스레드 상태제어 메소드
wait(), notify(), notifyAll()메소드는 Object클래스의 메소드이고, 그 이외의 메소드는 모두 Thread클래스의 메소드들입니다.
메소드 |
설명 |
interrupt() |
· 일시 정시 상태의 스레드에서 InterruptedException예외를 발생시켜, 예외 처리 코드(catch)에서 실행 대기 상태로 가거나 종료 상태로 갈 수 있도록 합니다. |
notify() notifyAll() |
· Object클래스의 메소드 · 동기화 블록내에서 wait()메소드에 의해 일시 정지 상태에 있는 스레드를 실행대기상태로 만듭니다. |
sleep(long millis)
sleep(long mills, int nanos) |
· 주어진 시간동안 스레드를 일시 정지 상태로 만듭니다. · 주어진 시간이 지나면 자동적으로 실행 대기 상태가 됩니다. |
join()
join(long millis)
join(long millis, int nanos) |
· join()메소드를 호출한 스레드는 일시 정지 상태가 됩니다. · 실행대기 상태로 가려면 join()메소드를 멤버로 가지는 스레드가 종료되거나, 매개값으로 주어진 시간이 지나야 합니다. |
wait() wait(long millis)
wait(long millis, int nanos)
|
· Object클래스의 메소드 · 동기화(synchronized)블록내에서 스레드를 일시 정지상태로 만듭니다. · 매개값으로 주어진 시간이 지나면 자동적으로 실행 대기 상태가 됩니다. · 시간이 주어지지않으면 notify(), notifyAll()메소드에 의해 실행 대기 상태로 갈 수 있습니다. |
yield() |
· 실행중에 우선순위가 동일한 다른 스레드에게 실행을 양보하고 실행대기 상태가 됩니다. |
suspend() |
· Deprecated · 스레드를 일시 정지 상태로 만듭니다. resume()메소드를 호출하면 다시 실행대기 상태가 됩니다. · wait()메소드를 대신 사용합니다. |
resume() |
· Deprecated · suspend()메소드에 의해 일시 정지 상태에 있는 스레드를 실행 대기 상태로 만듭니다. · notify(), notifyAll() 메소드를 대신 사용합니다. |
stop() |
· Deprecated · 스레드를 즉시 종료시킵니다. |
스레드 상태제어 메소드 도식도
'Development > Java' 카테고리의 다른 글
스트림의 특징 (0) | 2017.10.24 |
---|---|
Object 클래스의 wait(), notify(), notifyAll(), wait(), notify(), notifyAll(), Class Object, synchronized블록을 통해 하나의 쓰레드만 호출할 수 있도록 동기화 처리, java.lang.IllegalMonitorStateException, Object의 wait(),notify.. (0) | 2017.10.24 |
Thread life cycle(스레드의 생명주기) (0) | 2017.10.24 |
인터페이스간의 상속 (0) | 2017.10.23 |
process & thread - 프로세스(Process), 프로세스의 다른 정의들, 프로세스 종류, 실행파일 vs 프로세스 (0) | 2017.10.23 |