Thread 스레드
스레드 생명 주기와 스케줄링
✔ 스레드 상태
💡 Thread Life Cycle : 스레드 생성되고, 실행하고, 잠자고, 대기하고, 종료하는 등 생명주기를 가진다.
- NEW : 스레드 탄생
- RUNNABLE : 스레드가 현재 실행되고 있거나 실행 준비되어 스케줄링 기다리는 상태
- TIMED_WAITING : 스레드가 sleep(long n) 을 호출하여 n밀리초 동안 잠을 자는 상태
- BLOCK : I/O 작업을 실행하여 작업의 완료를 기다리며 멈춘 상태
- WAITING : 스레드가 어떤 객체 a에 대해 a.wait() 호출하여 다른 스레드가 a.notify()/a.notifyAll()을
호출해줄때까지 무한정 기다리는 상태 (Object Class에 속함) - TERMINATED : 스레드 종료한 상태
✔ 우선 순위
💡 setPriority(int newPriority) 우선순위 세팅
- 최대값 MAX_PRIORITY = 10
- 최소값 MIN_PRIORITY = 1
- 보통값 NOMAL_PRIORITY = 5
스레드 동기화 Thread Synchronization
✔ 동기화 필요성
- 멀티스레드 : 다수의 작업을 동시에 실행
▹공유 자원 혹은 공유 데이터에 동시 접근할 떄 문제점 발생할 수 있다. - 스레드 동기화 방법은 두가지
▹synchronized 동기화 블럭 지정
▹wait() - notify() 메소드로 스레드 실행 순서 제어
✔ 동기화 키워드 synchronized
- 순차적 실행을 위한 제어 기법
☑ 메소드 전체를 임계영역으로 지정
synchronized void add(){
int n = getCurrentSum(); // 스레드가 공유하는 데이터라 생각하고
n += 10;
setCurrentSum(n);
}
☑ 코드 블럭을 임계영역으로 지정
void execute(){
....
synchronized(this){
int n = getCurrentSum();
n += 10;
setCurrentSum(n);
}
...
}
❔임계영역 : 독점적으로 공유 데이터를 다루는 프로그램 코드