코딩기록
Day - 30 [JAVA] - Multi Thread {Thread State/control (sleep..) , Demon Thread} 본문
study
Day - 30 [JAVA] - Multi Thread {Thread State/control (sleep..) , Demon Thread}
9-99zy 2023. 3. 15. 14:30Thread State
- Thread 는 생성부터 종료 까지의 상태 값이 있다.
- 우리는 getState() 를 통해 현재 상태를 알 수 있다.
- New, Runnable, Terminated 값 정도만 기본적으로 알고 있자.

더보기
- Timed_Waiting : Thread.sleep(1000); 1초동안(주어진 시간)
- sleep 의 경우를 제외하면 나머지는 Waiting 이다.
- Terminated : 스레드가 끝났을 때
- Runnable : ex) 휴게소를 들를 때

- Work thread 에게 일을 시켜 보자
- 그리고 main thread 가 상태를 감시 하도록 해 보자
- // 실행할때는 아무것도 뜨지 않는데 쉴때 마다 runnable 이 뜨기 때문에 runnable 이 찍히는것이다.

Thread Control - sleep
- Thread 는 참 유용한 기능 이지만 예상대로 움직이지 않는다.
- 그래서 Thread Control 을 위한 method 들이 존재 한다.
1) sleep()
Sleep 은 주어진 milliseconds 동안 thread 를 일시 정지 시킨다.
Thread.sleep(1000) 형식으로 사용 한다.

2) yeild()
Yield 는 특정 스레드 에게 제어권을 양보 한다. => 너도 한번 할 기회를 줄게
Thread.yield() 형식으로 사용 한다.

3) join() = blocking 이라고 부르기도함 의미 비슷
Join 은 다른 thread 의 종료를 기다린 후에 실행 할 때 사용 한다.
Join 을 사용 할 때 와 사용하지 않을 때를 비교 해 보자

4) wait(), notify(), notifyAll()
wait() : 스레드를 일시 정지 상태로 만든다.
notify() : 일시 정지 상태중인 스레드 중 하나를 실행 대기 상태로 만든다.
notifyAll() : 일시 정지된 모든 스레드를 실행 대기 상태로 만든다.
- wait() 은 내가 쉬는것이고
- notify() 는 누군가를 깨우는 것이다.
- 아래의 상황은 wait 과 notify 를 실행하는 과정이다.

- wait() 과 notify() 를 이용하여 공동 데이터에 하나의 스레드만 접근 하도록 만들어 보자
- wait() , notify() , notifyAll() 호출은 synchronized 안에서 해야 한다.

요약
- Thread 제어를 위한 방법은 여러가지가 있다.
- sleep() 은 스스로가 정해진 시간 만큼 쉬는 것이다.
- yeild() 는 상대에게 실행 할 기회를 주는 것이다.
- join() 은 특정 스레드의 종료를 기다리는 것이다.
- wait() 은 누군가가 notify() 해 줄 떄 까지 쉬는 것이다.
5) Stop flag, interrupt()
stop -> 갑자기 팍 꺼지기 때문에 while 하위 메서드를 실행 할 수 없기 때문에 권장하지 않는다.
1. stop 쓰면 안된다. stopflag -> while문
2. interrupt -> 트라이 캐치
stop flag() :
interrupt() :
- 기본적으로 thread 는 run() 의 실행 내용이 모두 실행 되면 종료 된다.
- 무한 반복문으로 이루어진 경우는 강제 종료가 필요하다.
- 이때 stop() 을 사용 할 수 있으나 현재는 사용중지를 권고 하고 있다.
Stop() methos : Pc방 남은 시간 경고 없이 pc 가 꺼진다.

Demon Thread
- Demon Thread 는 main thread 작업을 돕는 보조적인 역할을 수행 한다.
- Work Thread 와 마찬가지로 main thread 에 의해서 생성 된다.
- 다만 life cycle 의 차이가 있다.

요약
- Thread 를 정지시키는 방법은 여러가지가 있다.(stop() 사용 금지)
- Demon thread 는 main thread 와 life cycle 을 같이 한다.
'study' 카테고리의 다른 글
| Day - 34 [Maria DB] CONSTRAINT (0) | 2023.03.21 |
|---|---|
| Day - 22 [JAVA_MVC] String 문자열 (0) | 2023.03.17 |
| Day - 25 [JAVA_MVC] Generic , Linked List, HashSet (0) | 2023.03.08 |
| Day-10 [J-Query] - set, sample, css, class, hideShow, fade, slide, animate (0) | 2023.02.14 |
| Day - 07 [JAVA Script] - window, location, child&parent (0) | 2023.02.09 |