Java 멀티스레딩/동시성

발행: (2026년 1월 18일 오후 03:04 GMT+9)
4 min read
원문: Dev.to

Source: Dev.to

Java에서 멀티스레딩이란?

Java의 멀티스레딩은 스레드라고 불리는 프로그램의 두 개 이상 부분을 동시에 실행하도록 허용하는 기능으로, CPU 활용도를 극대화합니다. 각 스레드는 다른 스레드와 병렬로 실행될 수 있으며, 동일한 메모리 공간을 공유합니다.

핵심 개념

  • Thread – 가벼운 서브‑프로세스로, 처리의 가장 작은 단위입니다. 하나의 프로세스 안에 여러 스레드가 존재할 수 있습니다.
  • Concurrency vs. Parallelism
    • Concurrency – 여러 스레드가 단일 CPU 코어에서 교차적으로 진행됩니다. 시스템이 스레드 간 전환을 수행해 동시에 실행되는 듯한 착각을 줍니다.
    • Parallelism – 여러 스레드가 서로 다른 CPU 코어에서 동시에 실행되어 진정한 병렬 처리를 달성합니다.
  • 주된 목적
    • Performance – CPU 집약적인 작업을 병렬로 실행해 멀티코어 프로세서에서 실행 속도를 높입니다.
    • Responsiveness – 애플리케이션을 반응형으로 유지합니다. 네트워크 요청이나 파일 다운로드와 같은 장시간 실행 작업을 백그라운드 스레드에서 수행해 UI가 멈추는 것을 방지합니다.

Java에서 스레드 생성 방법

스레드를 만드는 방법은 크게 두 가지가 있습니다.

Runnable 인터페이스 구현 (권장)

class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("Thread is running by implementing Runnable.");
    }
}

// To start the thread:
MyRunnable myRunnable = new MyRunnable();
Thread thread = new Thread(myRunnable);
thread.start();

Thread 클래스 상속

class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("Thread is running by extending Thread.");
    }
}

// To start the thread:
MyThread thread = new MyThread();
thread.start();

스레드 상태

Java에서는 java.lang.Thread.State에 정의된 다음 상태 중 하나에 스레드가 존재합니다.

  • NEW – 스레드가 생성되었지만 아직 시작되지 않은 상태.

  • RUNNABLE – 스레드가 JVM 내에서 실행 중(현재 실행 중이거나 스케줄러 선택을 기다리는 준비 상태)인 상태.

  • BLOCKED – 스레드가 synchronized 블록이나 메서드에 진입하기 위해 모니터 락을 획득하려고 대기하는 상태.

  • WAITING – 스레드가 다른 스레드가 특정 동작을 수행하기를 무기한으로 기다리는 상태. 다음 메서드를 호출함으로써 이 상태에 들어갑니다:

    Object.wait();               // no timeout
    Thread.join();               // no timeout
    LockSupport.park();
  • TIMED_WAITING – 스레드가 지정된 시간 동안 대기하는 상태. 타임아웃이 있는 메서드를 호출함으로써 이 상태에 들어갑니다, 예를 들어:

    Thread.sleep(long millis);
    Object.wait(long timeout);
    Thread.join(long millis);
    LockSupport.parkNanos(long nanos);
    LockSupport.parkUntil(long deadline);
  • TERMINATED – 스레드가 run() 메서드를 정상적으로 마치거나 처리되지 않은 예외를 발생시켜 실행을 종료한 상태.

Back to Blog

관련 글

더 보기 »

SC #3: Swift 6와의 관계

Swift Concurrency 3 Part Series https://dev.to/david_goyes_a488f58a17a53/series/35092 'Swift Concurrency'는 Swift 6의 기초였지만, Swift 6은 …