스레드(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() 메소드를 통해 쓰레드를 스케쥴러를 통해 동작시킬 수 있습니다.
쓰레드를 생성하는 두 가지 방법
JVM에서의 스케쥴링 규칙
철저한 우선 순위 기반
가장 높은 우선 순위의 스레드가 우선적으로 스케쥴링
동일한 우선 순위의 스레드는 돌아가면서 스케쥴링(라운드 로빈)