ホームページ Java &#&チュートリアル Java での Thread.start() 呼び出しと Thread.run() 呼び出しの違いは何ですか?

Java での Thread.start() 呼び出しと Thread.run() 呼び出しの違いは何ですか?

Nov 13, 2024 am 11:17 AM

What is the difference between calling Thread.start() and Thread.run() in Java?

Java での Thread.start() と Thread.run() の呼び出し

はじめに:
Java のマルチスレッドは、タスクを同時に実行するためのメカニズムを提供します。マルチスレッドの重要なコンポーネントの 1 つは Thread クラスです。スレッドを実行するには、Thread.start() または Thread.run() を呼び出すことができます。この記事の目的は、これら 2 つのメソッドの違いを明確にし、どのような場合に違いが生じるかを示すことです。

違いを理解する:
スレッド オブジェクトで Thread.start() を呼び出すと、新しい実行スレッド。これにより、オペレーティング システムのスレッド スケジューラに新しいスレッドを作成し、その実行をスケジュールするよう指示されます。スレッドが開始されると、スレッドは独立し、メイン スレッドと同時に実行されます。

一方、スレッド オブジェクトで Thread.run() を呼び出すと、現在のスレッドでスレッドの run() メソッドが実行されるだけです。 。この場合、スレッドは独立して実行されるようにスケジュールされておらず、run() メソッドが呼び出された後に run() メソッドが順番に実行されます。

Run を呼び出す代わりにスレッドを開始する理由
スレッドの開始には、run() を直接呼び出す場合よりもいくつかの利点があります:

  • 同時実行性: スレッドを開始すると、利用可能なスレッドを利用して複数のスレッドを同時に実行できます。リソースを処理し、アプリケーションのパフォーマンスを向上させます。
  • スレッド管理: オペレーティング システムは、スケジューリングやコンテキストの切り替えなどのスレッドを管理し、アプリケーションをこれらの責任から解放します。
  • コードの単純さ: スレッドを開始することは、run() を直接呼び出してスレッドを手動で管理する場合に比べて、より簡潔で簡単な同時実行性を実現する方法です。

違いを示す例:
違いを説明するために、次の例を考えてみましょう:

public class ThreadExample extends Thread {

    @Override
    public void run() {
        System.out.println("Thread is running...");
    }

    public static void main(String[] args) {
        ThreadExample thread = new ThreadExample();

        // Call the run() method directly - executed in the main thread
        thread.run();

        // Start the thread - runs concurrently with the main thread
        thread.start();
    }
}
ログイン後にコピー

このコードが run() メソッド呼び出しで実行されると、出力は次のようになります:

Thread is running...
ログイン後にコピー
ログイン後にコピー

この場合、run() メソッドはメインスレッドで実行され、同時実行性はありません。ただし、start() メソッド呼び出しでコードが実行されると、出力は次のようになります:

Thread is running...
ログイン後にコピー
ログイン後にコピー

... 続いてメイン スレッドの出力が続き、スレッドが並行して実行されていることを示します。

以上がJava での Thread.start() 呼び出しと Thread.run() 呼び出しの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

2025年のトップ4 JavaScriptフレームワーク:React、Angular、Vue、Svelte 2025年のトップ4 JavaScriptフレームワーク:React、Angular、Vue、Svelte Mar 07, 2025 pm 06:09 PM

2025年のトップ4 JavaScriptフレームワーク:React、Angular、Vue、Svelte

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか? Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか? Mar 17, 2025 pm 05:35 PM

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?

高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか? 高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか? Mar 17, 2025 pm 05:46 PM

高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?

node.js 20:キーパフォーマンスが向上し、新機能 node.js 20:キーパフォーマンスが向上し、新機能 Mar 07, 2025 pm 06:12 PM

node.js 20:キーパフォーマンスが向上し、新機能

Iceberg:データレイクテーブルの未来 Iceberg:データレイクテーブルの未来 Mar 07, 2025 pm 06:31 PM

Iceberg:データレイクテーブルの未来

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか? カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか? Mar 17, 2025 pm 05:44 PM

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?

Spring Boot Snakeyaml 2.0 CVE-2022-1471問題修正 Spring Boot Snakeyaml 2.0 CVE-2022-1471問題修正 Mar 07, 2025 pm 05:52 PM

Spring Boot Snakeyaml 2.0 CVE-2022-1471問題修正

キュウリのステップ間でデータを共有する方法 キュウリのステップ間でデータを共有する方法 Mar 07, 2025 pm 05:55 PM

キュウリのステップ間でデータを共有する方法

See all articles