JAVA

Thread 생명주기 및 주요 메서드

JUN0126 2022. 5. 16. 22:04

네트워킹은 스레드를 이용하여 소켓을 생성한다.

-> Web Server에서 N개의 클라이언트에게 서비스를 제공해줄 때 스레드를 사용하여 서비스를 제공한다 (멀티 스레드)

 

스레드의 상태  6가지 (생명주기) 

 - JVM이 TCB (Thread Controll Block ) 관리하는 곳을 통하여 Thread 정보를 관리 

 1. NEW

 - Thread를 생성 (실행할 준비는 안됨)

 2. RUNNABLE

  - 실행 준비중 상태 혹은 실행중인 상태, JVM에서 RUNNABLE 상태인 스레드를 사용함 (start 메소드 호출)

 3. WAITING

  - 대기 상태,  wait() 메소드 호출 시 WATING 상태가 됨, notify() 메서드 호출 시 대기상태 스레드를 동기화 하여 재 시작

 4. TIMED_WATING

  - 시간을 설정하면 설정한 시간만큼 대기하고 시간이 지난 뒤 재 시작

 5. BLOCK

  - 스레드에서 I/O 작업이 실행 되면 I/O 작업이 끝날떄 까지 기다리는 상태 

 6. TERMINATED

  - 스레드가 종료된 상태

 

스레드의 생명주기 

Round Robbin 방식

 - 스레드의 우선순위가 같은 것들을 번갈아가며 스레드를 실행 시킴

 

yield() 메서드

 - 현재 작업을 멈추고 다른 Thread에게 실행을 양보함, 현재 작업은 wating 되서 기다림 

 

 

스레드의 동기화 (Thread Synchronization)

 - 다수의 스레드가 공유 데이터에 동시에 접근하는 경우 공유 데이터의 값에 예상치 못한 결과가 발생할 경우 동기화를 통하여 문제 해결

 - 공유 데이터를 접근하는 모든 스레드를 한 줄로 세어서, 한 스레드가 공유 데이터에 대한 작업을 끝낼 때 까지 다른 스레드가 대기하도록한다

 

 

synchronized 키워드

 - 한 스레드가 독점적으로 실행해야 하는 부분을 표시하는 키워드

 - 임계 영역 표기 키워드

 

 

synchronized 실행 시

- 메소드 전체 혹은 코드 블록 내 사용  

- 먼저 실행한 스레드가 모니터를 소유

   - "모니터"란 해당 객체를 독점적으로 사용할 수 있는 권한

 - 모니터를 소유한 스레드가 모니터를 내놓을 떄 까지 다른 스레드는 대기 

 

 

wait(), notify(), nmotifyAll() 을 이용한 동기화

 

동기화 객체 

 - 두 개 이상의 스레드 사이에 동기화 작업에 사용되는 객체

동기화 메소드

 - synchronized 블록 내에서만 사용

 1. wait()

  - 다른 스레드가 notify()를 불러줄 떄 까지 기다린다.

  2. notify()

  - wait()를 호출하여 대기중인 스레드를 꺠우고 RUNNABLE 상태로 만든다.

  - 2개 이상의 스레드가 대기중이라도 오직 한 스레드만 꺠운다.

  3. notifyAll()

  - wait()를 호출하여 대기중인 모든 스레드르 꺠우고 모두 RUNNABLE 상태로 만든다.

 

'JAVA' 카테고리의 다른 글

Socket Programming  (0) 2022.05.10
InetAddress 클래스  (0) 2022.05.05
이메일 보내기 (SMTP 방식)  (0) 2022.04.03
Retrofit2 (Java)  (0) 2022.04.02
JSON 변환 라이브러리 (Gson,Jackson)  (0) 2022.03.17