Multi Thread(멀티스레드) - 2 (스레드 상태와 상태 제어)

dykwon·2024년 1월 16일

  1. 스레드 상태
    • 스레드 객체 생성 후 start() 메소드를 호출하면, Runnable 상태가 된다.
    • 이후, 실행 대기상태에 있는 스레드가 스케줄링으로 선택이 되면, run() 메소르를 실행하고 CPU를 점유한다.
    • 이때 상태를 우리는 실행상태(Running)이라고 한다.
    • 실행 대기 상태로 다시 넘어가려면, 일시 정지 상태를 거쳐 이동한다.
      • WAITING : 다른 스레드가 통지할 때까지 기다리는 상태
      • TIMED_WAITING : 주어진 시간 동안 기다리는 상태(Thread.sleep())
      • BLOCKED : 사용하고자 하는 객체의 락이 풀릴때까지 기다리는 상태
    • Thread가 완전히 종료되면, Terminated 상태가 된다.

  1. 상태제어
    • Thread.sleep(1000) : 1초동안 일시정지
    • Thread.yield() : 해당 스레드의 실행을 양보한다.
      (A, B 스레드 실행 후 A 스레드에 yield 실행 시, B 스레드로만 동작)
    • Thread.join() : 다른 스레드의 종료를 기다림
      (threadA에서 threadB를 start() 메소드를 통해 실행 후, threadB.join() 호출 시 스레드 B가 끝날때까지 스레드 A는 일시정지 되었다가 실행된다.)
    • wait() : 동기화 블록내 스레드를 일시정지 상태로 만든다. (Object Class의 Method)
    • notify() : 일시정지 상태에 있는 스레드를 실행 대기(Runnable 상태)로 만든다 (Object Class의 Method)
    • interrupt() : 스레드에 interruptedExection을 발생시켜 안전하게 종료한다.
      스레드가 실행상태에 있을때는 발생하지 않고, 스레드가 일시정지 상태가 된 이후에 동작한다 (Object Class의 Method)
profile
Programmer, who turns ideas into value

0개의 댓글