ForkJoinWorkerThread — ForkJoinPool이 관리하는 워커 스레드

ForkJoinWorkerThread — ForkJoinPool이 관리하는 워커 스레드

ForkJoinWorkerThreadForkJoinPool이 관리하며 ForkJoinTask를 실행하는 스레드예요. 서브클래스화는 오직 기능 추가를 위해서만 허용돼요 — 스케줄링이나 실행을 다루는 오버라이드 가능한 메서드는 없어요.

출처: Java API Reference

본문

개념 이해하기

ForkJoinWorkerThreadForkJoinPool이 관리하며 ForkJoinTask를 실행하는 스레드예요.

public class ForkJoinWorkerThread
extends Thread
implements Runnable

이 클래스는 기능 추가를 위해서만 서브클래스화할 수 있어요 — 스케줄링이나 실행을 다루는 오버라이드 가능한 메서드는 없지만, 주요 태스크 처리 루프를 둘러싼 초기화·종료 메서드는 오버라이드할 수 있어요. 그런 서브클래스를 만들면 ForkJoinPool에서 사용하려면 커스텀 ForkJoinPool.ForkJoinWorkerThreadFactory도 제공해야 해요.

생성자

protected ForkJoinWorkerThread(ThreadGroup group, ForkJoinPool pool, boolean preserveThreadLocals) — 주어진 스레드 그룹과 풀에서, 주어진 ThreadLocal 보존 정책으로 동작하는 ForkJoinWorkerThread를 만들어요. (JDK 19+)

  • group — null이 아니면 이 스레드의 스레드 그룹. 아니면 보안 관리자가 있는 경우 그에 따라 선택되고, 없으면 현재 스레드의 그룹으로 설정
  • pool — 이 스레드가 일하는 풀
  • preserveThreadLocals — true면 태스크 간 ThreadLocal 변수 값을 항상 보존, 아니면 지워질 수 있음
  • NullPointerExceptionpoolnull일 때

protected ForkJoinWorkerThread(ForkJoinPool pool) — 주어진 풀에서 동작하는 ForkJoinWorkerThread를 만들어요.

  • NullPointerException

메서드

public ForkJoinPool getPool() — 이 스레드를 호스팅하는 풀을 반환해요.

public int getPoolIndex() — 풀에서 이 스레드의 고유 인덱스 번호를 반환해요. 값은 0부터 풀에 존재할 수 있는 최대 스레드 수(빼기 1)까지이며, 스레드 수명 동안 변하지 않아요. 태스크 단위가 아니라 워커 스레드 단위로 상태를 추적하거나 결과를 모으는 애플리케이션에 유용해요.

public int getQueuedTaskCount() — 스레드 큐에 있는 태스크 수의 (음수가 아닌) 추정치를 반환해요. (JDK 20+)

protected void onStart() — 생성 후 태스크를 처리하기 전에 내부 상태를 초기화해요. 오버라이드하면 메서드 시작에 super.onStart()를 호출해야 해요. 대부분의 필드는 이 스레드가 태스크 처리를 시작하기 전에도 다른 스레드의 접근이 제대로 동작하도록 합법적인 기본값을 가져야 해요.

protected void onTermination(Throwable exception) — 이 워커 스레드의 종료와 관련된 정리를 수행해요. 오버라이드하면 오버라이드된 메서드 끝에 super.onTermination을 호출해야 해요.

  • exception — 복구할 수 없는 오류로 스레드가 중단되게 한 예외, 정상 완료면 null

public void run() — 공개여야 하지만 명시적으로 호출하면 안 되는 메서드로, ForkJoinTask를 실행하는 주요 실행 루프를 수행해요.

더 알아보기 (Learn more)