스레드 상태제어, 스레드 상태제어 메소드, 스레드 상태제어 메소드 도식도

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

·       스레드를 즉시 종료시킵니다.

 

 

 

스레드 상태제어 메소드 도식도