Backend/Java

[Java] 싱글스레드 / 멀티스레드 / 스레드의 IO 블록킹 /스레드 우선순위 / 스레드 그룹 / 데몬 스레드

가은파파 2022. 2. 14. 16:48

학습목표

  • 싱글스레드
  • 멀티스레드
  • 스레드의 IO 블록킹
  • 스레드 우선순위
  • 스레드 그룹
  • 데몬 스레드

싱글스레드

  • 예를 들어 main() 메소드가 동작하고 그곳에서 main 스레드가 한줄씩 동작한다.
  • 실행 중인 스레드가 하나도 없을때 프로그램은 종료된다.
  • main 스레드는 다른 스레드가 작업 종료와 관계없이 실행중인 것이 없으면 종료된다.
    • join()을 활용해 다른 메서드가 종료될 때 까지 기다렸다가 작업을 진행할 수 있는 메소드가 있다.

 

멀티스레드

  • 멀티스레드는 싱글스레드와 다르게 컨텍스트 스위칭 비용이 생겨난다.
  • 그러나 싱글스레드보다 멀티스레드가 좋은 이유는 다음과 같다.
    • 동시에 여러 작업을 할 수 있다.
    • 작업을 좀 더 효율적으로 할 수 있다. -> 스레드의 IO 블락킹

 

스레드의 IO 블록킹

  • 싱글스레드의 동작시에 여러가지 동작을 순차적으로 작업되며 블락킹이 된다. -> 아무작업도 할 수 없다.
  • 하지만 멀티스레드는 A 스레드가 작업하는동안, B 스레드도 작업을 진행하기 때문에 효율적으로 코드를 작성할 수 있다. 보다 자원을 효율적으로 쓸 수 있다.
  • cpu는 IO 퍼포먼스가 좋기때문에 멀티스레드로 작성하면 자원을 효율적으로 쓸 수 있다.

 

스레드의 우선순위

  • 작업의 중요도에 따라 우선순위를 스레드마다 지정할 수 있다.
  • 하지만 현실적으로 OS스케줄러가 공평하게 스레드, 프로세스에게 실행순서를 주기 때문에 희망사항일 뿐이다. 어느정도 고려를 할 뿐이다.

 

스레드 그룹

  • 서로 관련된 스레드와 그룹을 묶어서 다루기 위한 것이다.
  • 기본적으로 메인스레드 그룹으로 속하게 된다.
  • 기본 우선순위 상속을 받는다.

 

 데몬 스레드

  • 가비지 콜렉터, 자동 저장, 화면 자동 갱신 같이 메인 스레드에서 작업할 내용이 아닌 보조적인 기능을 담당하는 스레드를 데몬 스레드로 작성할 수 있다.
  • start()를 실행하기전에 setDaemon()을 실행해줘야 한다.
  • 기본 우선순위 상속을 받는다.