본문 바로가기
WEB BE/JAVA

Java Thread Model 의 역사

by 조금씩 차근차근 2025. 1. 6.

Java 1.0~1.4: 초기 스레드 모델

  • Thread 클래스와 Runnable 인터페이스 도입
    • 기본적인 스레드 생성 및 실행 메커니즘이 제공됨.
    • synchronized, wait(), notify(), notifyAll() 메서드를 사용한 동기화가 가능.
  • 초기 문제점
    • 동기화 블록의 관리가 어려움.
    • 스레드 풀과 같은 고급 API 부재.
    • 비효율적인 스레드 관리.

Java 5 (2004): java.util.concurrent 패키지 도입

새로운 기능

  1. Executor Framework

    • 스레드 관리를 단순화하는 스레드 풀 및 작업 실행 프레임워크.

      ExecutorService executor = Executors.newFixedThreadPool(4);
      executor.execute(() -> System.out.println("Task running"));
      executor.shutdown();
  2. ReentrantLock

    • 더 유연한 락 메커니즘 제공 (재진입 가능).

      ReentrantLock lock = new ReentrantLock();
      lock.lock();
      try {
        // 임계 영역
      } finally {
        lock.unlock();
      }
  3. CallableFuture

    • 반환값을 갖는 작업을 비동기적으로 실행 가능.

      Future<Integer> result = executor.submit(() -> 42);
      System.out.println(result.get()); // 42
  4. CountDownLatch, Semaphore, CyclicBarrier

    • 스레드 간의 조율 및 동기화를 위한 고급 유틸리티.
  5. BlockingQueue

    • Thread-Safe 제공.

Java 7 (2011): Fork/Join Framework

새로운 기능

  1. Fork/Join Framework

    • 작업을 작은 단위로 나누어 병렬 처리를 지원. CPU 코어를 최대한 활용.

      ForkJoinPool pool = new ForkJoinPool();
      pool.invoke(new RecursiveTaskExample());
  2. Phaser

    • 스레드 동기화를 위한 새로운 동기화 클래스.
    • CyclicBarrierCountDownLatch의 장점을 결합.
  3. TransferQueue 및 기타 동시성 데이터 구조 개선

    • 생산자-소비자 패턴을 효율적으로 지원.

Java 8 (2014): CompletableFuture

새로운 기능

  1. CompletableFuture

    • 비동기 작업을 더욱 간편하게 작성할 수 있도록 개선된 API.

      CompletableFuture.supplyAsync(() -> "Hello")
        .thenApply(result -> result + " World")
        .thenAccept(System.out::println); // Hello World
    • 콜백 스타일의 비동기 작업 지원.

    • 조합 및 체인 작업 가능.

  2. Lambda와 Stream API

    • 멀티스레드 환경에서 parallelStream을 사용해 데이터 병렬 처리 가능.

Java 9 (2017): Reactive Streams

새로운 기능

  1. java.util.concurrent.Flow API

    • 리액티브 프로그래밍을 위한 인터페이스 제공.
    • Publisher, Subscriber, Processor와 같은 컴포넌트 정의.
  2. Immutable Collections

    멀티스레드 환경에서 안전한 불변 컬렉션 생성 메서드 추가.


Java 11 (2018): Enhancements

  1. CompletableFuture 개선

    • 타임아웃과 관련된 API 추가 (orTimeout, completeOnTimeout).

      future.orTimeout(1, TimeUnit.SECONDS);
  2. 동시성 관련 성능 최적화

    • JVM 수준에서의 병렬 처리와 스레드 관리 효율성 향상.

Java 19 (2022): Virtual Threads (Project Loom, 미리보기 기능)

  1. Virtual Threads:경량 스레드 지원으로, 수천 개의 스레드를 생성해도 효율적으로 작동.

     try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
         executor.submit(() -> System.out.println("Running in a virtual thread"));
     }
    • 기존 OS 스레드 기반의 한계를 극복.
    • 비동기 작업의 코드 복잡도를 대폭 줄임.

Java 21 (2023): Virtual Threads 정식 도입

  1. Virtual Threads 정식 기능

    • 멀티스레드 프로그래밍의 표준으로 자리 잡음.
    • 블로킹 코드도 Virtual Thread를 통해 효율적으로 실행 가능.
  2. Structured Concurrency API

    • 여러 스레드를 함께 관리할 수 있는 새로운 API.

      try (var scope = StructuredTaskScope.open()) {
        scope.fork(() -> fetchData());
        scope.join();
      }

'WEB BE > JAVA' 카테고리의 다른 글

[Test] LocalDateTime 을 사용하는 함수의 테스팅 방법  (0) 2024.10.13