쓰레드의 실행제어

Jaeho Kim·2022년 4월 8일
0

자바의정석

목록 보기
2/7
post-thumbnail

✏️ 쓰레드의 실행제어

  • main쓰레드란?
    main method의 코드를 수행하는 쓰레드, 사용자 쓰레드
    실행 중인 사용자 쓰레드가 하나도 없을 때 프로그램은 종료된다.

  • 데몬 쓰레드란?
    사용자 쓰레드를 보조해주는 보조 쓰레드

멀티쓰레드 환경에서는 OS스케쥴러가 정해주는 순서에 따라 실행되기 때문에, 매번 실행시간이 다르다.

하지만 특정 상황에서 쓰레드를 사용함으로 속도를 단축 시킬 수 있다.

  • 동기화란(synchronization)?
    여러 개의 Thread가 한 개의 자원을 사용하고자 할 때,
    해당 Thread만 제외하고 나머지는 접근을 못하도록 막는 것이다.

  • 스케줄링(scheduling)?
    스레드의 개수가 코어(CPU)의 수보다 많을 경우, 스레드를 어떤 순서에 의해 동시성으로 실행할 것인가를 정하는 작업

scheduling method

  • static void sleep(long millis)
    static void sleep(long millis, int nanos)
    지정된 시간(천분의 일초 단위) 동안 쓰레드 일시정지. nanos 같은 경우 추가 정지 할 수 있는 나노초.
  • void join()
    void join(long millis)
    void join(long millis, int nanos)
    지정된 시간동안 쓰레드가 실행되도록 한다. 지정된 시간이 지나거나 작업이 종료되면 join()을 호출한 쓰레드로 다시 돌아와 실행을 계속한다.
  • void interrupt()
    sleep이나 join에 의해 일시정지상태인 쓰레드를 깨워서 실행대기상태로 만든다. 해당 쓰레드에서는 interruptedException이 발생함으로써 일시정지상태를 벗어나게된다.
  • void stop()
    쓰레드를 즉시 종료시킨다.
  • void resume()
    suspend에 의해 일시정지상태에 있는 쓰레드를 실행대기상태로 만든다.
  • void suspend() 쓰레드를 일시정지 시킨다. resume()호출하면 다시 실행대기상태로 만든다.
  • static void yield()
    실행중에 자신에게 주어진 실행시간을 다른 쓰레드에게 양보하고 자신은 실행대기상태가 된다.

쓰레드의 상태

  • NEW 쓰레드가 생성되고 아직 start()가 호출되지 않은상태
  • RUNNABLE 실행 중 또는 실행 가능한 상태
  • BLOCKED 동기화블럭에 의해서 일시정지된 상태(lock이 풀릴 때까지 기다리는 상태)
  • WAITING,TIMED_WAITING 쓰레드의 작업이 종료되지는 않았지만 실행가능하지 않은 일시정지 상태. TIMED_WAITING은 일시정지시간이 지정된 경우를 의미한다.
  • TERMINATED 쓰레드의 작업이 종료된 상태

예제 13-12) 현재 실행중인 쓰레드에 대해 작동하는 sleep
참조변수 이용 보다 직접접근 Thread.sleep();

예제 13-13) interrupt를 이용하여 작업 취소

예제 13-14) catch InterruptedException 예제

예제 13-15) 정지 구현과, os 스케쥴링으로 인한 실행대기 상태로 시간지연

profile
Hello, World!

0개의 댓글