1

スレッド プールに関する私の理解では、スレッド プールにメソッドを渡すと、アクティブなプールからスレッドが選択され、メソッドが実行されるように送信されます。スレッドについての私の理解では、スレッドにコードを入れると、スリープまたは停止するように指示されるまで停止することなくコードを実行します。

私の質問:

いくつかのメソッド (実行する長さがほぼ同じ) をスレッドプールに次々に渡すと、スレッドプールは実行中の異なるスレッド間の共有を管理して、タスクがほぼ同時に終了するか、またはそれらを次々に実行します-たとえば、タスク 1 はスレッド 1 に入り、スレッド 1 はそれを実行し始め、タスク 2 を含むスレッド 2 はタスク タスク 1 が終了するまで実行する機会がありませんでした。メッセージをスリープさせます - そのため、スレッド 2 が実行され、タスクは基本的に次々と終了します。

基本的に、スレッドを同時に実行するために、スレッドプールに与えるコードにブレークがあることを明示的に確認する必要がありますか? または、スレッド プール マネージャーを使用している場合、これは無料で入手できますか?

4

4 に答える 4

3

OPは、CPUを別のスレッド/プロセスに渡して実行するために、スレッドがスリープ/解放する必要があるという古い協調マルチタスクの方法で考えているようです。

ただし、Java の場合 (少なくとも、ほとんどの一般的な JVM 実装の場合) は当てはまりません。Java では、マルチタスキングはプリエンプティブです。つまり、スレッド 1 が実行されている場合、yield/sleep を明示的に行わなくても、スレッド 2 は同時に実行できます (タイム スライス/別の CPU コアでの実行などにより)。

于 2012-07-18T04:48:52.813 に答える
2

1.プールで指定した数のスレッドが同時に動作します。これがスレッドの目的であり、同時に作業を実行します。パラレルランです

2.たとえば、FixedThreadPoolには特定の数のスレッドがあり、実行するタスクの特定の数を指定すると、すべて同時に実行されます。作業の数がプール内のスレッドよりも少ない場合、それらのみが実行されます。タスクを実行するために必要な多くのスレッドが同時に実行されます。

3. CachedThreadPool の場合、作業を完了するためにプール内のスレッドの数が同時に実行されます。さらにスレッドが必要な場合、CachedThreadPool は新しいスレッドを作成するか、それまで再利用します。

于 2012-07-18T04:29:10.010 に答える
1

実行順序に関する保証はありません。多くのものに依存します。ただし、タスクが十分に長い場合は、タスクが同時に実行されると想定できます。

于 2012-07-18T04:32:40.313 に答える
1

複数のスレッドを使用すると、タスクが並行して実行されます。プールは、使用可能なすべてのスレッドを使用します (使用可能 = プール用に構成されています)。

于 2012-07-18T04:32:11.840 に答える