私のマルチスレッドの概念は弱く、学習しようとしています。
私が知っている Java では、スレッドを複数回呼び出すことはできません。
Thread t = new Thread; //Some Runnable
t.start();
t.start(); //Illegal and throw Exception at runtime.
私の知る限り、メソッドを終了するとスレッドに関連付けられたスタックが破棄され、再度初期化しようとしているt.start()
ため、再度呼び出すと例外がスローされます。run()
その場合、スレッドプールについて私が知っていることは、新しいスレッドを作成する必要がないため、パフォーマンスが向上し、時間を節約できるということです (私はこれを読みました)。
スレッド プール シナリオで新しいスレッドを作成する必要がない場合、run メソッドを終了したばかりの同じスレッドでどのように機能するか、そのスレッドを再度使用できますか?
これを読んだところ、「java.util.concurrent のエグゼキュータ実装のほとんどは、ワーカー スレッドで構成されるスレッド プールを使用しています。この種のスレッドは、実行する Runnable および Callable タスクとは別に存在し、多くの場合、実行に使用されます。複数のタスク。」
では、ここでのワーカー スレッドとは何ですか。通常の Java スレッドとは異なるものですか?
このリンクで、私は何かを得ましたが、スレッドプールを使用するときにどのようなものを排除できるか、および通常の Java スレッドを使用するよりもパフォーマンスが向上する理由についてまだ混乱しています。
では、次のように言えますか。
スレッドには 3 つの部分があり、
- 作成 (OS に新しいスレッドであることを伝え、スタックを作成します。)
- run() メソッドで Runnable を実行します。
- スレッドの破棄。
したがって、上記の 3 つの手順を考慮すると、スレッド プールを使用すると、一定数のスレッドを作成した後、手順 1 と手順 3 を削除できます。各タスクのステップ 2 のみが実行されるため、スレッドプールの方が高速ですか? このように言えますか?私は正しいですか?