728x90
반응형

쓰레드의 실행제어

쓰레드는 동기화와 스케줄링이 어렵습니다. 우선 순위로 스케쥴링을 하는 방법이 있으나,
정교한 스케쥴링을 통해 프로세스에게 주어진 자원과 시간을 여러 쓰레드가 낭비없이
잘 사용하도록 프로그래밍 해야합니다.


쓰레드의 상태


 상태

 설명

 NEW

 쓰레드가 생성되고 아직 start()가 호출되지 않은 상태

 RUNNABLE

 실행 중 또는 실행 가능한 상태

 BLOCKED

 동기화블럭에 의해서 일시정지된 상태 ( Lock이 풀릴 때까지 기다리는 상태 )

 WAITING,

TIMED_WAITING

 쓰레드의 작업이 종료되지 않았지만 실행가능하지 않은 일시정시(unrunnable) 상태 TIMED_WAITING은 일시정지시간이 지정된 경우를 의미

 TERMINATED

 쓰레드의 작업이 종료된 상태



[ 쓰레드의 상태 ]


쓰레드를 생성하고 start()를 호출하면 바로 실행되는 것이 아니라 실행대기열에 저장되어 자신의 차례가 될 때까지 기다려야합니다.  실행대기열은 큐와 같은 구조로 먼저 실행대기열에 들어 온 쓰레드가 들어온 쓰레드가 먼저 실행됩니다.


실행대기상태에 있다가 자신의 차례가 되면 실행상태가 됩니다.


③ 주어진 실행시간이 다되거나 yield()를 만나면 다시 실행대기상태가 되고 다음 차례의 쓰레드가 실행상태가 됩니다.


실행 중에 suspend(), sleep(), wait(), join(), I/O block에 의해 일시정지상태가 될 수 있습니다.
I/O block은 입출력작업에서 발생하는 지연상태를 말합니다. 사용자의 입력을 기다리면 경우를 예로 들 수 있는데, 이런 경우 일시정지 상태에 있다가 사용자가 입력을 마치면 다시 실행대기상태가 됩니다.


지정된 일시정지시간이 다되거나(time-out), notify(), resume(), interrup()가 호출되면 일시정지 상태를 벗어나 다시 실행대기열에 저장되어 자신의 차례를 기다리게 됩니다.


실행을 모두 마치거나 stop()이 호출되면 쓰레드는 소멸됩니다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void interrupt()
: sleep()이나 join()에 의해 일시정지상태인 쓰레드를 실행대기상태로 만듭니다.
  해당 쓰레드에서는 InterruptedException이 발생함으로써 일시정지상태를 벗어나게합니다.
 
void join()
void join(long millis)
void join(long millis, int nanos)
: 지정된 시간동안 쓰레드가 실행되도록합니다. 지정된 시간이 지나거나 작업이 종료되면
  join()을 호출한 쓰레드로 다시 돌아와 실행을 계속합니다.
 
void resume()
: suspend()에 의해 일시정지상태에 있는 쓰레드를 실행대기상태로 만듭니다.
 
static void sleep(long millis)
static void sleel(long millis, int nanos)
: 지정된 시간동안 쓰레드를 일시정지시킵니다.
  지정한 시간이 지나고 나면 자동적으로 다시 실행대기상태가 됩니다.
 
void stop()
: 쓰레드를 즉시 종료시킵니다. 교착상태에 빠지기 쉽기때문에 잘 사용하지 않습니다.
 
void suspend()
: 쓰레드를 일시정지시킵니다.
  resume()을 호출하면 다시 실행대기 상태가 됩니다.
 
static void yield()
: 실행 중에 다른 쓰레드에게 양보하고 실행대기상태가 됩니다.
cs



728x90
반응형

'JAVA > JAVA 스레드' 카테고리의 다른 글

[java] wait()와 notify()  (0) 2017.11.02
[java] 쓰레드의 동기화  (0) 2017.11.02
[java] 데몬 쓰레드  (0) 2017.11.01
[java] 쓰레드 그룹  (0) 2017.11.01
[java] 쓰레드의 우선순위  (0) 2017.11.01
[java] 싱글쓰레드와 멀티쓰레드  (0) 2017.11.01
[java] start()와 run()  (0) 2017.11.01
[java] 쓰레드 구현 및 실행  (0) 2017.11.01
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,