[CS] 자바의 스레드

박현우·2021년 11월 14일
0

CS

목록 보기
18/20

스레드(Thread)란?

프로세스를 구성하는 세부 실행단위(Unit)를 말합니다. 자바는 JVM을 통해 멀티 쓰레드를 구성하여 concurrent 하게 동작하여 동시에 여러 작업을 수행할 수 있습니다. 하지만 동시에 수행되는 쓰레드의 수행순서는 보장되어 있지 않습니다.

또한, 모든 프로세스는 메인 스레드를 반드시 하나씩 가지고 있습니다.


Main Thread

JVM은 main() 메소드를 찾아 Main Thread를 동작시킵니다. 기본적으로 Main Thread는 다른 쓰레드와 차별화 되어 있는게 아니라 처음에 수행되는 쓰레드입니다. 그러므로 메인 쓰레드의 종료와 다른 쓰레드의 종료는 관련없이 별개로 동작합니다. 메인 쓰레드가 종료되어도 다른 모든 쓰레드가 종료되어야 JVM의 동작이 멈춥니다.


Thread Class

JAVA에서 쓰레드는 JDK가 제공하는 java.lang.Thread 클래스를 통해 사용합니다. Thread 클래스의 속성인 Runnable target 구현객체의 run() 메소드의 구현부에서 해당 쓰레드의 실제 동작을 정의하며 start() 메소드를 통해 쓰레드를 스케쥴러를 통해 동작시킬 수 있습니다.


쓰레드를 생성하는 두 가지 방법

직접 상속 받아 스레드 생성

  • Interface Runnable 을 구현하는 클래스를 생성
  • void run() 메소드를 오버라이딩하여 쓰레드의 동작 정의
  • 쓰레드 객체를 만들어서 Runnable 을 구현한 객체를 생성자의 매개변수로 넘김
  • 해당 쓰레드 객체의 start() 메소드로 쓰레드 수행

Runnable 인터페이스를 구현해서 생성

  • Thread 클래스를 상속한 클래스 구현
  • void run() 메소드를 오버라이딩
  • 구현 객체를 생성하고 객체의 start() 메소드로 run() 메소드 수행 시작

JVM에서의 스케쥴링 규칙

  • 철저한 우선 순위 기반

  • 가장 높은 우선 순위의 스레드가 우선적으로 스케쥴링

  • 동일한 우선 순위의 스레드는 돌아가면서 스케쥴링(라운드 로빈)


ref.

0개의 댓글