그냥 알고만 가는 쓰레드의 기능 간략 정리

개념

프로세스란? 실행 중인 프로그램, 자원과 쓰레드로 구성
쓰레드란? 프로세스 내에서 실제 작업을 수행. 

싱글과 멀티

싱글 쓰레드 프로세스 : 하나의 자원과 하나의 쓰레드
멀티 쓰레드 프로세스 : 하나의 자원과 다수의 쓰레드

 

멀티 프로세스와 멀티 쓰레드의 차이

멀티 프로세스 : 동시에 여러 프로세스 실행
멀티 쓰레드 : 하나의 프로세스 내에 동시에 여러 쓰레드 실행
- 프로세스 생성 비용 > 쓰레스 생성 비용
- 멀티 쓰레드는 서로 자원을 공유

멀티 쓰레드의 장단점

  • 장점
    • 시스템 자원을 효율적으로 사용
    • 사용자에 대한 응답성 향상
    • 코드 간결 
  • 단점
    • 개발자 부담 (동기화, 교착상태, 각 쓰레드의 관리)

 

쓰레드의 구현과 실행

구현

  • Thread 클래스 상속 : 메서드 run 오버라이딩
  • Runnable 인터페이스 구현 : 추상메서드 run 구현


실행 

  • start()

 


쓰레드의 특징

  1. main쓰레드는 main메서드의 코드를 수행하는 쓰레드이다
  2. 사용자 쓰레드와 데몬쓰레드 두 종류가 있다 
  3. 사용자 입력을 기다리는 구간동안 다른 쓰레드를 실행 (효율적으로 운영)
  4. 작업의 중요도에 따라 쓰레드의 우선순위를 다르게 할 수 있다 (높을 수록 작업 시간이 늘어남)
  5. 모든 쓰레드는 그룹으로 묶여져 있으며, 여러 그룹에 속할 수 있다 (보안을 위함, 기본은 main쓰레드 그룹)

 

데몬 쓰레드

  • 일반 쓰레드의 작업을 돕는 보조적인 역할
  • 일반 쓰레드가 모두 종료시 자동적으로 종료된다.

 


쓰레드의 상태

상태 의미
NEW   쓰레드가 생성되고 호출되지 않은 상태
RUNNABLE  실행 중 or 실행 가능 상태
BLOCKED  동기화 블럭에 의해 일시정지된 상태 (풀릴 때까지 대기)
WAITING, TIMED_WAITING 실행도중 일시정지된 상태, TIMED_WAITING은 일시정지 시간이 지정된 경우
TERMINATED  쓰레드의 작업이 종료된 상태

 


쓰레드의 실행제어

메소드 기능
sleep  지정된 시간 동안 쓰레드를 일시정시킨다.
join  지정된 시간동안 쓰레드가 실행되도록 한다. 끝나면 호출한 쓰레드로 복귀
interrupt 위에서 지시한 일시정지상태인 쓰레드를 깨워서 실행대기상태로 만든다.
yield  실행 중에 자신에게 주어진 실행시간응ㄹ 다른 쓰레드에게 양보하고 자신은 실행대기상태가 된다.
stop (deprecated) 쓰레드를 즉시 종료
suspend (deprecated) 쓰레드를 일시정지킨다. 
resume (deprecated) suspend에 의해 일시정지상태에 있는 쓰레드를 실행대기상태로 복귀

*deprecated된 메서드는 쓰레드를 교착 상태로 만들기 쉽다는 이유로 쓰이지 않게 되었다

 


 쓰레드의 동기화

배경 : 멀티 쓰레드 포르세스에서는 다른 쓰레드의 작업에 영향을 끼침, 간섭을 피하기 위해 동기화가 필요
개념 : 한 쓰레드가 진행 중인 다른 쓰레드가 간섭하지 못하게 막는 것

절차 

  1. 동기화하려는 코드를 임계 영역으로 설정 (lock이 걸리는 영역)
  2. 임계영역은 락을 얻은 단 하나의 쓰레드만 출입 가능

 

sysnchronized를 이용한 동기화

  • 메서드 전체 또는 특정한 영역을 설정할 수 있다

 


wait()과 notify()

  • 동기화 효율 증진
  • sysnchronized 블록 내에서만 사용 가능
  • wait() : 객체의 lock을 풀고, 쓰레드를 해당 객체의 waiting pool에 넣는다
  • notify() : waiting pool에서 대기중인 쓰레드 중의 하나를 깨운다
  • notifyAll() : waiting pool에서 대기중인 모든 쓰레드를 깨운다

+ Recent posts