ホームページ > Java > &#&チュートリアル > Thread.start() と Runnable.run(): マルチスレッドの違いは何ですか?

Thread.start() と Runnable.run(): マルチスレッドの違いは何ですか?

Mary-Kate Olsen
リリース: 2025-01-03 16:53:39
オリジナル
284 人が閲覧しました

Thread.start() vs. Runnable.run(): What's the Difference in Multithreading?

マルチスレッドの Thread.start() と Runnable.run()

マルチスレッドを詳しく調べると、次の 2 つの重要なメソッドに遭遇することがよくあります。 .start() と Runnable.run()。効果的なスレッド管理には、これらの違いを理解することが不可欠です。

Runnable.run()

run() メソッドは、Runnable インターフェイスの実装の重要な部分です。別のスレッドとして実行する必要があるコードを定義します。 run() を呼び出すと、基本的に、呼び出しスレッド内で実装されたコードの実行が開始されます。

Thread.start()

run() とは異なり、Thread の呼び出しは.start() は、関連付けられたスレッドのコードを直接実行しません。代わりに、新しいスレッドを起動し、run() メソッドの実行をその新しいスレッドに委任します。新しいスレッドは呼び出し元のスレッドとは独立して動作するため、真のマルチスレッドが可能になります。

主な違い

根本的な違いは、複数のスレッドが作成されるかどうかにあります。 run() を呼び出すと単に現在のスレッド内でコードが実行されますが、start() は新しいスレッドを開始してコードを実行します。

2 つの Runnable クラスを考えてみましょう。 R1 と R2:

class R1 implements Runnable {
    public void run() { ... }
}

class R2 implements Runnable {
    public void run() { ... }
}
ログイン後にコピー

ケース 1: を使用するrun()

R1 r1 = new R1();
R2 r2 = new R2();

r1.run();
r2.run();
ログイン後にコピー

このシナリオでは、r1 と r2 の両方が同じスレッド内で run() メソッドを順番に実行します。追加のスレッドは作成されません。

ケース 2: start() を使用する

R1 r1 = new R1();
R2 r2 = new R2();
Thread t1 = new Thread(r1);
Thread t2 = new Thread(r2);

t1.start();
t2.start();
ログイン後にコピー

t1 と t2 で start() が呼び出されると、新しいスレッドが作成されます。 r1 と r2 の run() メソッドをそれぞれ実行します。これにより、各スレッドが独立して実行される真のマルチスレッドが実現します。

以上がThread.start() と Runnable.run(): マルチスレッドの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート