0

タスクが Scheduledthreadpoolexecutor に追加されている状況を想像してください。これらの各タスクは、異なる定期的な間隔で実行され続けます。

それぞれが異なる間隔で設定されているため、このようなすべてのタスクが同時に実行されるわけではありませんが、多数のスレッドが実行のために競合している状況が発生する可能性があります。

スレッドの総数に制限はありますか? アイドルスレッドの総数に制限があるようです。そして、このアイドルスレッドの概念は、長時間実行されているタスク (スレッド) が破棄され、必要に応じて再作成される可能性があることを意味しますか?

4

1 に答える 1

1

スケジュールされたthreadpoolexecutorのスレッドプールサイズは増え続けていますか?

いいえ。http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledThreadPoolExecutor.htmlから:

.... it acts as a fixed-sized pool using corePoolSize threads ...

スレッドの総数に制限はありますか?

はい。上記を参照。

アイドルスレッドの総数に制限があるようです。

どうしてそう思ったのかわかりません。ドキュメント(またはテストした場合の動作)には、それを意味するものは何もありません。

そして、アイドルスレッドのこの概念は、長時間実行されているタスク (スレッド) が破棄され、必要に応じて再作成される可能性があることを意味しますか?

タスク != スレッド; この質問はあまり意味がありません。タスクは、実行中ずっとそのスレッドを占有します。したがって、実行時間の長いタスクはスレッドを長時間占有したままにし、その間に他のスケジュールされたタスクで使用できるスレッドの数を減らします。タスクは、executor によって破棄されたり再作成されたりすることはありません。executor はタスクを停止しようとするかもしれませんが、それは実行中のすべてのタスクを介しshutdownNow()てなど、明示的にそうするように指示した場合に限られます。interrupt()無関係ですが、固定サイズのプール内のスレッドは、固定サイズのプールであるため、破棄または再作成されません。

于 2013-11-02T09:43:32.990 に答える