13.3~13.7
3. start()와 run()
- run()
- 클래스에 선언된 메서드 호출
- 쓰레드에서 수행할 작업을 정의
- start ()
- 새로운 쓰레드가 작업을 실행하는데 필요한 호출 스택을 생성한다음 run() 호출
- 새로운 쓰레드를 만듬
- 모든 쓰레드는 독립적인 작업 수행을 위해 자신만의 호출 스택을 필요로함
- 쓰레드가 종료되면 작업에 사용된 호출스택은 소멸
- main() 메서드의 작업을 수행하는것도 쓰레드
- 실행중인 사용자 쓰레드가 하나도 없으면 프로그램 종료
4. 싱글쓰레드와 멀티쓰레드
- 싱글코어에서 하나의 쓰레드로 두 개의 작업을 수행하는 경우 1)
- 싱글코어에서 두 개의 쓰레드로 두 개의 작업을 수행하는 경우 2)
- task1 → task2 → task1 → task2 →
- 1)과 2)를 수행하는데 걸리는 시간은 거의 같음
- 2)의 경우 작업 전환(Context Switching)이 필요하기 때문에 싱글코어에서 성능이 감소할 수 있음
- 멀티코어에서는 쓰레드가 같은 자원을 사용하는경우 동시에 두 쓰레드가 수행 될 수 있음 → 자원을두고 쓰레드 간 경쟁 발생
- 서로 다른 자원을 서로 다른 쓰레드가 사용한다면 멀티 쓰레드가 효율적
- ex) 사용자의 입력(자원)을 받는작업과 시간을 화면(자원 2)에 출력 하는경우 멀티쓰레드에서는 사용자의 입력을 받는동안 시간을 출력 하지만 싱글쓰레드에서는 입력을 받는동안 출력이 정지됨
- 작업 전환에서 다음에 실행해야할 위치 등의 정보를 저장하고 읽어오는데 시간 소요
- 프로세스의경우 더 많은 정보를 저장해야하기때문에 작업 전환에 쓰레드보다 더 많은 시간 소요
- 자바의 쓰레드는 OS종속적인 부분이 있기에 다른 종류의 OS에서 테스트 필요
5. 쓰레드의 우선순위
- 쓰레드의 priority 멤버 필드에 의해 쓰레드의 우선순위 결정
- 우선순위에의해 쓰레드가 얻는 실행 시간 결정
- 쓰레드인스턴스.setPriority(int newPriority) 메서드로 우선 순위 설정
- mian쓰레드의의 우선순위는 5
- 쓰레드를 생성한 쓰레드로부터 우선순의를 기본값으로 상속받음
- 1(우선순위낮음) ~ 10(우선순위높음) 까지 설정가능
6. 쓰레드 그룹
- 서로관련된 쓰레드를 그룹으로 다루기 위한 것
- 쓰레드 그룹에 다른 쓰레드 포함 가능
- 보안상의 이유로 도입됨
- 자신이 속한 쓰레드 그룹이나 하위 쓰레드 그룹은 변경 가능
- 다른 쓰레드 그룹의 쓰레드는 변경 불가
7. 데몬 쓰레드
- 일반 쓰레드(데몬 쓰레드가 아닌 쓰레드)의 작업을 돕는 보조 역할 수행
- 일반 쓰레드가 모두 종료되고 나면 강제로 종료
- ex) 가비지 컬렉터, 워드프로세서의 자동저장, 화면자동갱신
- 무한루프와 조건문을 이용해서 실행 후 대기, 특정 조건이 만족되면 작업 수행 후 대기
- 쓰레드인스턴스.setDaemon(true) 호출로 데몬 쓰레드 설정
- 데몬 쓰레드가 생성한 쓰레드는 자동으로 데몬 쓰레드가 됨
Leave a comment