네트워킹은 스레드를 이용하여 소켓을 생성한다.
-> 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 |