java.util.concurrent.Executor
「実際の」スレッドをどのように作成しますか?Executorを実装しているか、任意のexecutorサービス(ThreadPoolExecutorなど)を使用しているとします。JVMは内部でどのように機能しますか?
2 に答える
を呼び出しますThreadFactory
。Executors
クラスを見てください。ThreadFactory
それらはすべて、実装を提供できるオーバーロードされた引数を持っていることに注意してください。ThreadFactory
インターフェースは基本的に
public Thread newThread(Runnable runnable);
基本的に提供されていない場合のデフォルトの実装はreturn new Thread(runnable);
これをオーバーライドする理由 - とりわけ、スレッド名とデーモンのステータスを設定するのに非常に便利です。
Executorは、既製のスレッド管理インターフェイスです。
エグゼキュータのタイプに応じて、1つ以上のスレッドを作成します。スレッドが終了すると、タスクエグゼキュータはそれらを停止するか、実行を終了します。スケジュールされたタスクを実行するエグゼキュータを作成することもできます(たとえば、毎分)。これは、わずか5秒間に必要な多数(多くの場合、数千のスレッド)を作成する場合や、時間の経過とともに使用される多数のスレッドを作成する場合に適しています。
スレッドの数よりも多くのタスクを作成および送信するスレッドの数を指定すると、他のすべてのRunnableオブジェクトは、順番が来るまでキューに入れられます。ここではJVMの魔法はなく、Javaコードだけです。