Java 8 以前のバージョンでは、ForkJoinPool のクラス・ローダーは、ForkJoinPool を呼び出した親スレッドから継承されることがありました。このクラス・ローダー継承によって、メモリー・リークの問題が発生する可能性があります。Java 9 以降、ForkJoinPool クラス・ローダーは呼び出し側スレッドからクラス・ローダーを継承しなくなりました。アプリケーションがマルチスレッド環境で実行されている場合、スレッド・コンテキスト・クラス・ローダー伝搬に関連する振る舞いが異なる可能性があります。
この規則は、アプリケーション規則ごとに 1 回のフラグです。この規則は、以下のいずれかのメソッドを呼び出す (サブクラスの呼び出しを含む) アプリケーションにフラグを立てます。
java.util.concurrent.CompletableFuture.runAsync(Runnable runnable)java.util.concurrent.CompletableFuture.thenRunAsync(Runnable runnable)java.util.concurrent.ForkJoinPool.commonPool()java.util.concurrent.ForkJoinTask.fork()java.util.concurrent.ForkJoinTask.invokeAll()注: この振る舞いの変更は、例えば MicroProfile Context Propagation、Jakarta/Java EE Concurrency、その他のアプリケーション固有の手段によって、スレッド・コンテキスト・クラス・ローダーの伝搬をまだ準備していない場合にのみ適用されます。
Java SE 9 の変更について詳しくは、 Java 9 Release Notes を参照してください。