Java EEでForkJoinPoolを使用しないでください。 threads have to be managed by the containerのように、アプリケーションサーバーだけが並列処理のための構成を提供することになっています(Java EE 7のManagedExecutorServiceなど)。
奇妙なことに、this answerに記載されているメーリングリストには、ForkJoinPoolがEEコンテナ内のシングルスレッドに正常に劣化するというメッセージがあります。私はこれをglassfish 4.1でテストしました。通常のスレッドが作成されます。
@Singleton
public class SomeSingleton {
public void fireStream() {
IntStream.range(0, 32)
.parallel()
.mapToObj(i -> String.format("Task %d on thread %s",
i, Thread.currentThread().getName()))
.forEach(System.out::println);
}
}
私は次のような出力が得られます:
Info: Task 20 on thread http-listener-1(4)
Info: Task 10 on thread ForkJoinPool.commonPool-worker-3
Info: Task 21 on thread http-listener-1(4)
Info: Task 11 on thread ForkJoinPool.commonPool-worker-3
Info: Task 22 on thread http-listener-1(4)
Info: Task 8 on thread ForkJoinPool.commonPool-worker-3
Info: Task 23 on thread http-listener-1(4)
Info: Task 9 on thread ForkJoinPool.commonPool-worker-3
Info: Task 18 on thread http-listener-1(4)
Info: Task 14 on thread ForkJoinPool.commonPool-worker-3
Info: Task 19 on thread http-listener-1(4)
Info: Task 15 on thread ForkJoinPool.commonPool-worker-3
Info: Task 16 on thread http-listener-1(4)
Info: Task 17 on thread http-listener-1(4)
Info: Task 4 on thread http-listener-1(4)
Info: Task 5 on thread http-listener-1(4)
Info: Task 6 on thread http-listener-1(4)
Info: Task 7 on thread http-listener-1(4)
Info: Task 2 on thread http-listener-1(4)
Info: Task 3 on thread http-listener-1(4)
Info: Task 0 on thread http-listener-1(4)
Info: Task 1 on thread http-listener-1(4)
Info: Task 26 on thread http-listener-1(4)
Info: Task 27 on thread http-listener-1(4)
Info: Task 24 on thread http-listener-1(4)
Info: Task 25 on thread http-listener-1(4)
Info: Task 12 on thread http-listener-1(4)
Info: Task 13 on thread http-listener-1(4)
Info: Task 30 on thread http-listener-1(4)
Info: Task 31 on thread http-listener-1(4)
Info: Task 28 on thread ForkJoinPool.commonPool-worker-0
Info: Task 29 on thread ForkJoinPool.commonPool-worker-0
はおそらく、劣化がほとんど個々の仕様はSE 8の機能を活用したJava EE 8、上で利用できるようになりますこのコードを実行します。
編集
私はGlassFishの4.1.1のソースコードをチェックしました、とForkJoinPool
、ForkJoinWorkerThreadFactory
またはForkJoinWorkerThread
の単独使用はありません。したがって、アプリケーションサーバー管理の並列処理リソースは、これらの構造に基づいていません。残念ながら、実際には劣化メカニズムはありません。
最後に私が聞いた(それはしばらく経ちました)ここにあります:http://coopsoft.com/ar/Calamity2Article.html#EE – edharned