학습목표
- 싱글스레드
- 멀티스레드
- 스레드의 IO 블록킹
- 스레드 우선순위
- 스레드 그룹
- 데몬 스레드
싱글스레드
- 예를 들어 main() 메소드가 동작하고 그곳에서 main 스레드가 한줄씩 동작한다.
- 실행 중인 스레드가 하나도 없을때 프로그램은 종료된다.
- main 스레드는 다른 스레드가 작업 종료와 관계없이 실행중인 것이 없으면 종료된다.
- join()을 활용해 다른 메서드가 종료될 때 까지 기다렸다가 작업을 진행할 수 있는 메소드가 있다.
멀티스레드
- 멀티스레드는 싱글스레드와 다르게 컨텍스트 스위칭 비용이 생겨난다.
- 그러나 싱글스레드보다 멀티스레드가 좋은 이유는 다음과 같다.
- 동시에 여러 작업을 할 수 있다.
- 작업을 좀 더 효율적으로 할 수 있다. -> 스레드의 IO 블락킹
스레드의 IO 블록킹
- 싱글스레드의 동작시에 여러가지 동작을 순차적으로 작업되며 블락킹이 된다. -> 아무작업도 할 수 없다.
- 하지만 멀티스레드는 A 스레드가 작업하는동안, B 스레드도 작업을 진행하기 때문에 효율적으로 코드를 작성할 수 있다. 보다 자원을 효율적으로 쓸 수 있다.
- cpu는 IO 퍼포먼스가 좋기때문에 멀티스레드로 작성하면 자원을 효율적으로 쓸 수 있다.
스레드의 우선순위
- 작업의 중요도에 따라 우선순위를 스레드마다 지정할 수 있다.
- 하지만 현실적으로 OS스케줄러가 공평하게 스레드, 프로세스에게 실행순서를 주기 때문에 희망사항일 뿐이다. 어느정도 고려를 할 뿐이다.
스레드 그룹
- 서로 관련된 스레드와 그룹을 묶어서 다루기 위한 것이다.
- 기본적으로 메인스레드 그룹으로 속하게 된다.
- 기본 우선순위 상속을 받는다.
데몬 스레드
- 가비지 콜렉터, 자동 저장, 화면 자동 갱신 같이 메인 스레드에서 작업할 내용이 아닌 보조적인 기능을 담당하는 스레드를 데몬 스레드로 작성할 수 있다.
- start()를 실행하기전에 setDaemon()을 실행해줘야 한다.
- 기본 우선순위 상속을 받는다.
'Backend > Java' 카테고리의 다른 글
[Java] HashTable / HashMap / 연결리스트의 중간노드 찾기 / LRU 캐시 (0) | 2022.02.22 |
---|---|
[Java] 재귀함수 / 일반재귀 vs 꼬리재귀 / 언어별 꼬리 재귀 최적화 / 연결리스트 꼬리재귀 코드 (0) | 2022.02.20 |
String / StringBuffer / StringBuilder / concat과 +, StringBuffer의 append의 차이 (0) | 2022.02.12 |
Java 인터페이스(Interface) (0) | 2021.03.06 |
Java - 패키지 (package/import/클래스패스/접근지시자) (0) | 2021.03.05 |