ホームページ  >  記事  >  Java  >  Java でのスレッド実行では、Thread.run() より Thread.start() が優先されるのはなぜですか?

Java でのスレッド実行では、Thread.run() より Thread.start() が優先されるのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-18 04:04:02408ブラウズ

Why is Thread.start() preferred over Thread.run() for thread execution in Java?

Java でのスレッド実装: Thread.start() と Thread.run() の比較

Java では、同時実行性の基本的な側面は次のとおりです。スレッドの作成と実行。このコンテキストでは、Thread.start() と Thread.run() の違いを理解することが重要です。

Thread.start() は、新しい実行スレッドの開始を担当するメソッドです。呼び出されると、スレッドのスタックをセットアップし、その初期状態を実行可能に設定し、Java 仮想マシン (JVM) によって実行されるようにスケジュールします。対照的に、Thread.run() は、新しいスレッドを作成せずに、呼び出しスレッドの run() メソッド内のコードを直接実行します。

Thread.start() を使用する理由

Thread.run() ではなく Thread.start() を使用することが不可欠です。その理由は次のとおりです。

  • マルチスレッド: Thread.start() は新しいスレッドを作成します。コードの同時実行を有効にします。
  • ライフサイクル制御: Start() はスレッドのライフサイクルを初期化し、開始、中断、参加などの適切なスレッド管理を可能にします。

Thread.run() の直接呼び出し

Thread.run() を呼び出すのは便利に思えるかもしれませんが、次の理由により、このアプローチは避けるべきです。

  • シングル スレッド: run() を実行すると、同じスレッドでコードが直接実行され、マルチスレッドの利点が無効になります。
  • スレッド管理なし: start() を呼び出さないと、適切なスレッド管理と同期は行われません。

次のコードを考えてみましょう:

public class ThreadExample {
    public static void main(String[] args) {
        Runnable task = () -> System.out.println("This is a new thread!");
        Thread thread = new Thread(task);

        // Direct invocation of run() - no multi-threading occurs.
        // thread.run();

        // Correct multi-threading using start().
        thread.start();
    }
}

Thread.run() の直接呼び出しをコメントアウトすると、新しいスレッドが作成されて使用されたことが出力に表示されますが、run() を直接実行するとメインスレッド内でコードが実行され、マルチなしの出力が生成されます。 -threading.

結論

Java では、Thread.start() を呼び出すことがスレッドの作成と実行に推奨される方法です。一方、Thread.run() は、マルチスレッド機能とスレッド管理機能を妨げるため、直接使用しないでください。

以上がJava でのスレッド実行では、Thread.run() より Thread.start() が優先されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。