ホームページ >Java >&#&チュートリアル >Java での真のマルチスレッド化に `Thread.start()` が不可欠なのはなぜですか?

Java での真のマルチスレッド化に `Thread.start()` が不可欠なのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-15 09:15:17354ブラウズ

Why is `Thread.start()` essential for true multithreading in Java?

Thread.start() と Thread.run() の違いを理解する

Java でマルチスレッドを使用する場合、プログラマーは 2 つの重要な点に遭遇します。メソッド: Thread.start() および Thread.run()。これらの名前は同様の機能を示唆しているかもしれませんが、明らかに異なる目的を果たします。

これらのメソッドの機能は何ですか?

Thread.start():

  • 新しいスレッドを初期化し、別のスレッドで run() メソッドを実行します。
  • システム リソースを割り当て、スレッドの実行環境を設定します。
  • 制御は JVM に転送され、スレッドのスケジュールと実行を管理します。

Thread.run():

  • 直接現在のスレッド内で run() メソッドを呼び出します。
  • 新しいスレッドは作成しません。代わりに、現在の実行スレッドでコードが実行されます。
  • スレッド管理にシステム リソースが割り当てられません。

Thread.run を呼び出すことができないのはなぜですか()?

Thread.run() が run() メソッドも実行する場合、なぜ単に代わりにこれを呼び出すことができないのでしょうか。 Thread.start()?その理由は、マルチスレッドが提供する分離と独立した実行にあります。

Thread.run() を呼び出すと、別のスレッドではなく、現在のスレッドでコードが実行されます。これは、 run() メソッド内のコードは引き続き現在のスレッド内のリソースと対話し、リソースに影響を与えることを意味します。これは、タスクの同時実行を可能にするマルチスレッドの本来の目的ではありません。

違いを示す例:

次の点を考慮してください。コード:

public class ThreadExample {
    public static void main(String[] args) {
        Thread t1 = new Thread(() -> System.out.println("Thread 1"));
        Thread t2 = new Thread(() -> System.out.println("Thread 2"));

        // Here, we call Thread.start() and Thread.run():
        t1.start();  // Starts Thread 1 in a separate thread
        t2.run();    // Executes Thread 2 in the current thread

        System.out.println("Main Thread");
    }
}

出力:

Thread 1
Main Thread

t1 で Thread.start() を呼び出すと、新しいスレッドが作成され、そのスレッドで run() メソッドが実行されます。 、「スレッド 1」を印刷できるようになります。一方、t2 で Thread.run() を呼び出すと、新しいスレッドの作成をバイパスして、現在の (つまりメイン) スレッドで run() メソッドが実行されます。その結果、「スレッド 2」は別のスレッドで実行されないため、出力されません。

以上がJava での真のマルチスレッド化に `Thread.start()` が不可欠なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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