JAVA - Thread와 Runnable

choko's avatar
Jun 29, 2024
JAVA - Thread와 Runnable
 
  • 일반적으로 자바 애플리케이션을 실행하면 1개의 main쓰레드에 의해 프로그램이 실행된다.
  • 하지만 1개의 쓰레드 만으론 동시에 여러 작업을 할 수 없고, 자바는 멀티 쓰레드 기반으로 동시성 프로그래밍을 지원하기 위한 방법들을 계속해서 발전시켜 왔다.
  • Thread와 Runnable은 자바 초기부터 멀티 쓰레드를 위해 제공된 기술이다.
 

Thread 클래스

  • 쓰레드 생성을 위해 자바에서 미리 구현해둔 클래스이다.
  • 다음과 같은 메서드들을 제공한다.
    • sleep()
      • 현재 쓰레드 멈추기
    • intrupt()
      • 다른 쓰레드를 깨워 interruptedException를 발생시킴
      • interupt가 발생한 쓰레드는 예외를 catch하여 다른 작업을 할 수 있다.
    • join()
      • 다른 쓰레드의 작업이 끝날 때까지 기다리게 한다.
      • 쓰레드의 순서 제어 시 사용
  • Thread의 start 메서드를 호출하면 run 메서드가 실행된다.
    • thread.start() 시
      1. 쓰레드가 실행 가능한 지 검사
      1. 쓰레드를 쓰레드 그룹에 추가
      1. 쓰레드를 JVM이 실행시킴
  • 쓰레드를 JVM에서 실행시킬 때, JVM 내부에서 run을 호찰하고, 쓰레드의 상태 역시 Runnable로 바뀌게 된다.
 
 

Runnable 인터페이스

  • Runnable 인터페이스는 1개의 메서드만을 갖는 함수형 인터페이스이다.
@FunctionalInterface public interface Runnable { public abstract void run(); }
 
  • 쓰레드를 구현하기 위한 템플릿에 해당한다.
    • 해당 인터페이스의 구현체를 만든 후, Thread 객체 생성 시 넘겨주면 Thread 실행이 가능하다.
  • Runnable은 익명 객체 및 람다로 사용할 수 있다.
Runnable userA = () -> { fieldService.logic("userA"); }; // 다음 코드와 동일함 Runnable userA = new Runnable() { @Override public void run() { fieldService.logic("userA"); } }; Thread threadA = new Thread(userA); threadA.setName("thread-A"); threadA.start();
Share article

Tom의 TIL 정리방