ForkJoinWorkerThread — ForkJoinPool이 관리하는 워커 스레드
ForkJoinWorkerThread — ForkJoinPool이 관리하는 워커 스레드
ForkJoinWorkerThread는 ForkJoinPool이 관리하며 ForkJoinTask를 실행하는 스레드예요. 서브클래스화는 오직 기능 추가를 위해서만 허용돼요 — 스케줄링이나 실행을 다루는 오버라이드 가능한 메서드는 없어요.
본문
개념 이해하기
ForkJoinWorkerThread는 ForkJoinPool이 관리하며 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변수 값을 항상 보존, 아니면 지워질 수 있음NullPointerException—pool이null일 때
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를 실행하는 주요 실행 루프를 수행해요.