4
スレッドプールを使用してアイテムのリストを処理し、それらが完了するのを待っています。また、すべてが完了していない場合は、処理の4分後にそれをタイムアウトする必要があります。メインスレッドを使用しないフォークと結合
これは問題は時々このアプローチはawaitQuiescenceは、そのいずれかが完了するまで開始されないことを意味し、リスト項目のいずれかを処理するためにメインスレッドを使用することで、現時点で私が持っている
ForkJoinPool threadPool = new ForkJoinPool(Runtime.getRuntime().availableProcessors() * 2);
list.forEach(entry -> threadPool.execute(() -> {
// processing
}));
if (!threadPool.awaitQuiescence(4, TimeUnit.MINUTES)) {
// send alert about delay
}
です。同じようなことができますが、メインスレッドを使用しないことを保証する他のスレッドプールがありますか、またはForkJoinPoolを構成しない方法がありますか?
なぜ新しいスレッドで実行しないのですか?そして、「時にはメインスレッド上で実行される」というのは本当に意味をなさない。 'ForkJoinPool'がメインスレッドを使用するかどうかを選択するので、結果が矛盾していると言っていますか? –
ForkJoinPoolが矛盾しているようです。私は、使用中のスレッドを記録する処理内にログを記録し、時にはForkJoinPool-1-worker- [n]と呼ばれるもののみを使用し、スレッドのうちの1つがそれをトリガしたものです。 – sparkdoo
送信スレッドの使用を避ける方法はありません。私がここで指摘しているように、許容できるレベルのパフォーマンスを達成するには、送信スレッドが必要です。http://coopsoft.com/ar/Calamity2Article.html#submit – edharned