221031 Thread2. Multi Thread
Multi Thread : 2개 이상의 스레드가 수행중인 상황
대부분의 경우. 싱글 스레드는 없다고 생각해도 무방
1)Priority (우선순위) : 누가 먼저. 자주
I/o:시간이 오래 걸리는 작업-대표적으로 파일 입출력, 네트워크 입출력, 화면 출력
연산:시간이 짧게 걸리는 작업
I/o가 먼저 오고 연산이 뒤에 오는 상황-기아 상태(Stavation)
짧은 작업을 먼저 해야 함. 비동기-어떤작업이 먼저 실행될지 모름
2)Thread Group : 여러개의 스레드 관리
Semaphore
3)MuTual Exclusion(상호 배제). 뮤텍스.
=>하나의 스레드가 사용 중인 공유자원은 다른 스레드가 수정할 수 없다.
동시에 보는 건 문제가 아님. 동시에 수정할 수 없음에 주목
=>Lock과 Synchronized로 해결
Synchronized는 순서대로 처리.
ASynchronized는 비동기화-호출부에서 실행 결과를 기다리지 않아도 됨. callback(함수), 리스너(객체)
4)생산자와 소비자 문제
소비자는 생산자가 만들어주지 않으면 일을 할 수 없음
=>wait와 notification으로 해결
5)Dead Lock
=>결코 발생할 수 없는 사건을 무한정 기다리는 것
Parallel과 분산과 멀티스레드를 헷갈리지 말 것!
8.Thread Group
=>관련된 스레드들을 하나의 그룹으로 묶어서 사용하기 위한 개념
=>ThreadGroup이라는 클래스를 제공하지만 몇몇 메서드가 제대로 동작하지 않는 문제 때문에 대부분의 경우 배열이나 List를 이용해서 구현하는 것을 권장
9.Thread의 종료
=>run 메서드 종료
=>스레드의 interrupt메서드를 호출하고 스레드의 run메서드 안에서 InterruptedException이 발생하면 run메서드를 종료하도록 만들어서 강제 종료하도록 하는 것이 가능
=>Daemon Thread는 Daemon이 아닌 다른 스레드가 존재하지 않으면 자동으로 종료됩니다.
=>스레드의 실행 제어 메서드
void join(long millis, int nanos) : 지정된 시간동안 스레드를 수행하고 다른 스레드에게 제어권을 넘기는 메서드
void suspend() : 스레드를 일시 정지시키는 메서드로 resume 메서드로 다시 시작
void resume() : suspend된 스레드를 다시 시작
void yield() : 다른 스레드에게 제어권을 넘겨주는 메서드