したがって、Javaの並行性には、実際には任意の実装または(より具体的には、そのインターフェースのオーバーライドまたはメソッド)であるタスクの概念があります。Runnable
Callable
run()
call()
私は次の関係を理解するのに苦労しています:
- タスク(
Runnable
/Callable
); と - タスクはに
ExecutorService
送信されます。と - によって使用される基礎となる並行作業キューまたはリスト構造
ExecutorService
関係は次のようなものだと思います。
- 開発者であるあなたは、
ExecutorService
目前のタスクに最適な作業構造を選択する必要があります - 使用する基本構造で
ExecutorService
(たとえば、として)を初期化します(たとえば、 )(もしそうなら、どのように?!?!)ScheduledThreadPool
ArrayBlockingQueue
- タスクをに送信すると
ExecutorService
、スレッド/プーリング戦略を使用して、指定された構造(ABQまたはその他)にタスクのコピーが入力されます。 - 生成/プールされた各スレッドは、タスクのコピーを作業構造から引き出して実行するようになりました。
まず、私がそれらのいずれかに基づいていない場合は、上記の仮定のいずれかを修正/明確にしてください!
次に、タスクが基礎となる作業構造内で何度も何度もコピー/複製される場合(たとえば、リストの各インデックスに同一のコピーがある場合)、大きな問題をより小さな(並行)問題にどのように分解しますか?言い換えると、タスクが単純にステップA〜Zを実行し、それらのタスクが1,000個あるABQがある場合、各スレッドはA〜Zも実行するのではないでしょうか。「一部のスレッドはA-Gで動作し、他のスレッドはHで動作し、さらに他のスレッドはI-Zで動作する」などとはどういう意味ですか?
この2つ目では、すべてがどのように組み合わされるかを視覚化するためのコード例が必要になる場合があります。前もって感謝します。