카테고리 없음

[자바의정석] Chapter11. 자바 쓰레드(Thread) 정리

FelixShin 2016. 5. 8. 09:31
반응형

1. 프로세스와 쓰레드 정의


1) 프로세스 : 실행 중인 프로그램, 자원(데이터, 메모리) + 쓰레드


2) 쓰레드 : 프로세스 내에서 실제 작업을 수행하는 것

# 모든 프로세스는 하나 이상의 쓰레드를 가지고 있음

# 쓰레드가 작업을 수행하는데 개별적인 메모리공간(호출스텍)을 필요로 함 -> 즉, 프레세스 메모리 한계에 따라  생성할 수 있는 쓰레드의 수가 결정됨


(1) 멀티쓰레딩의 장점

: CPU의 사용률을 향상시킴

: 자원을 보다 효율적으로 사용할 수 있음(새로운 하나의 프로세스를 생성하는 것보다 새로운 하나의 쓰레드를 생성하는 것이 비용이 더 적게 듬)

: 사용자에 대한 응답성이 향상됨

: 작업이 분리되어 코드가 간결해짐


(2) 멀티쓰레딩의 단점

: 여러 쓰레드가 같은 프로세스 내에서 자원을 공유하며 작업하기 때문에 

 -> 동기화(synchronization), 교착상태 (deadlock) 등 문제가 발생할 수 있음


3) 간단정리 : 프로세스 : 쓰레드 = 공장 : 일꾼 (자바의 정석에서 정의)


싱글 쓰레드 프로세스  : 자원 + 쓰레드

멀티 쓰레드 프로세스 : 자원 + 쓰레드 + 쓰레드 + ... + 쓰레드




2. 쓰레드 구현과 실행


1) Thread 클래스를 상속

: start()를 호출해야 작업을 시작

: 하나의 쓰레드에 대해 strart()가 한번만 호출될 수 있음


(1) start() 실행시 절차

a) main()에서 쓰레드의 start() 호출

b) start()는 쓰레드 작업 수행하는데 사용될 새로운 호출스텍 생성

c) 생성된 호출스택에 run() 호출해서 쓰레드가 작업을 수행

d) 호출스택이 2개이기 때문에 스케줄러가 정한 순서에 의해 번갈아 가면서 실행


2) Runnable 인터페이스를 구현 

: Run() 내에 로직을 구현



3. 쓰레드의 우선순위

: 작업의 중요도에 따라 쓰레드의 우선순위를 다르게 하여 특정 쓰레드가 더 많은 작업 시간을 갖도록 할 수 있음


ex)

setPriority(int priority) -> param이 클수록 우선순위가 높음, 

-> 10은 최대 우선순위, 5는 보통, 1은 최소우선순위





4. 쓰레드 그룹

: 관련된 쓰레드를 그룹으로 묶어서 다루기 위한 것

: 모든 쓰레드는 반드시 하나의 쓰레드 그룹에 포함됨

: 쓰레드 그룹을 지정하지 않으면 생성한 쓰레드는 main쓰레드 그룹에 속함


5. 데몬 쓰레드

: 일반 쓰레드의 작업을 돕는 보조적인 역할을 수행

: 일반 쓰레드가 모두 종료되면 자동적으로 종료

: 쓰임 : 가비지 컬렉터, 자동저장, 화면자동갱신 등에 사용됨


6. 쓰레드의 실행제어

1) interrupt()

2) join()

3) resume()

5) sleep()

6) stop()

7) suspend(0

8) yield()



7. 쓰레드의 상태

1) new

2) Runnable

3) Blocked

4) waiting, timed_waiting

5) Terminated




8. 쓰레드의 동기화

: 한번에 하나의 쓰레드만 객체에 접근할 수 있도록 객체에 lock을 걸어 데이터의 일관성을 유지하는 것


1) 쓰레드의 효율을 높이기 위해 wait(), notify() 를 사용

: wait() : 객체의 lock을 풀고 해당 객체의 쓰레드를 waiting pool 에 넣음

: notify() : waiting pool에서 대기중인 쓰레드 중 하나를 깨움

: notifyAll() : waiting pool에서 대기중인 모든 쓰레드를 깨움