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

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

Barbara Streisand
リリース: 2024-12-25 18:54:14
オリジナル
582 人が閲覧しました

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

Thread start() と Runnable run(): スレッド パラダイムの解明

Java マルチスレッド プログラミングの領域では、Thread start() () メソッドと Runnable run() メソッドは、スレッド実行の調整において異なる役割を果たします。それらの違いを理解することは、効果的な同時アプリケーションを設計するために重要です。

Runnable run() と Thread start() の比較

Runnable インターフェイスは run() メソッドを定義します。別のスレッドで実行されるコードをカプセル化します。ただし、run() を直接呼び出しても、新しいスレッドは作成されません。代わりに、現在のスレッド内でコードが実行されます。

対照的に、Thread start() を呼び出すと、新しいスレッドが開始されます。スレッド オブジェクトを作成し、対応する Runnable インスタンスをそのコンストラクターに渡し、実行を開始します。その後、Runnable の run() メソッドが新しいスレッド内で呼び出されます。

例: シングルスレッド実行とマルチスレッド実行

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

public static void main() {
    R1 r1 = new R1();
    R2 r2 = new R2();
    
    r1.run();
    r2.run();
}
ログイン後にコピー

この例では、r1.run() と r2.run() が直接呼び出されます。両方の Runnable を単一のスレッドで実行します。スレッドの作成はありません。

次に、次の修正バージョンを考えてみましょう。

public static void main() {
    R1 r1 = new R1();
    R2 r2 = new R2();
    Thread t1 = new Thread(r1);
    Thread t2 = new Thread(r2);
    
    t1.start();
    t2.start();
}
ログイン後にコピー

この場合、Thread オブジェクトが作成され、r1 と r2 がカプセル化されます。これらの Thread オブジェクトで start() が呼び出されると、2 つの別個のスレッドが起動され、Runnable の run() メソッドがこれらのスレッド内で実行されます。

影響と考慮事項

Runnable run() ではなく Thread start() を使用すると、スレッドレベルの制御が提供されます。これにより、スレッドの作成、スケジューリング、リソース管理が可能になります。この制御は、複数のタスクを同時に調整し、パフォーマンスを最適化するために重要です。

一方、run() を直接呼び出すと、個別のスレッドが作成されず、現在のスレッドのコンテキストでコードが実行されます。このアプローチは、スレッドレベルの同時実行性を必要としない単純な同期タスクに適しています。

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

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