検索
ホームページJava&#&チュートリアルJavaでスレッドにデータを渡す方法

1. コンストラクター メソッドを介してデータを渡す

スレッドを作成するときは、Thread クラスまたはそのサブクラスのインスタンスを作成する必要があります。したがって、start メソッドを呼び出す前に、スレッド クラスのコンストラクター メソッドを通じてデータをスレッドに渡すことを考えるのは難しくありません。そして、スレッドで使用するためにクラス変数を使用して受信データを保存します (実際には run メソッドで使用されます)。次のコードは、コンストラクター メソッドを通じてデータを渡す方法を示しています。

package mythread;   public class MyThread1 extends Thread  {      private String name;       public MyThread1(String name)      {          this.name = name;      }      public void run()      {          System.out.println("hello " + name);      }      public static void main(String[] args)      {          Thread thread = new MyThread1("world");          thread.start();              }  }

このメソッドはスレッド オブジェクトの作成中にデータを渡すため、データはスレッドの実行前にすでに配置されているため、これによってデータが失われることはありません。スレッドの実行後に転送されます。より複雑なデータを渡したい場合は、コレクションやクラスなどのデータ構造を使用できます。コンストラクターメソッドを使用してデータを転送する方が安全ですが、転送するデータが大量になると非常に不便になります。 Java にはデフォルトパラメータがないため、デフォルトパラメータと同様の効果を実現したい場合はオーバーロードを使用する必要があり、コンストラクタ自体が複雑になるだけでなく、コンストラクタの数も大幅に増加します。したがって、この状況を回避するには、クラス メソッドまたはクラス変数を介してデータを渡します。

2. 変数とメソッドを介してデータを渡す

一般に、データをオブジェクトに渡す機会は 2 つあります。1 つ目は、オブジェクトの作成時にコンストラクターを介することです。メソッドはデータを渡しますが、もう 1 つの機会は、クラス内に一連のパブリック メソッドまたは変数 (フィールドとも呼ばれます) を定義することです。次に、オブジェクトを作成した後、オブジェクト インスタンスを通じて値を 1 つずつ割り当てます。次のコードは MyThread1 クラスを変更したもので、setName メソッドを使用して name 変数を設定します:

package mythread;   public class MyThread2 implements Runnable  {      private String name;       public void setName(String name)      {          this.name = name;      }      public void run()      {          System.out.println("hello " + name);      }      public static void main(String[] args)      {          MyThread2 myThread = new MyThread2();          myThread.setName("world");          Thread thread = new Thread(myThread);          thread.start();      }  }

3. コールバック関数を介してデータを渡します

この 2 つは、上で説明したように、データをスレッドに渡すこの方法が最も一般的に使用されます。ただし、どちらのメソッドもメイン メソッドのスレッド クラスにデータを積極的に渡します。スレッドの場合、このデータは受動的に受信されます。ただし、アプリケーションによっては、スレッドの実行中に動的にデータを取得する必要がある場合があります。たとえば、次のコードの run メソッドで 3 つの乱数を生成し、process メソッドでこれら 3 つの乱数の合計を計算します。 Work クラスの値を取得し、Data クラスの値を通じて結果を返します。この例からわかるように、値を返す前に 3 つの乱数を取得する必要があります。つまり、この値を事前にスレッド クラスに渡すことはできません。

package mythread;   class Data  {      public int value = 0;  }  class Work  {      public void process(Data data, Integer numbers)      {          for (int n : numbers)          {              data.value += n;          }      }  }  public class MyThread3 extends Thread  {      private Work work;       public MyThread3(Work work)      {          this.work = work;      }      public void run()      {          java.util.Random random = new java.util.Random();          Data data = new Data();          int n1 = random.nextInt(1000);          int n2 = random.nextInt(2000);          int n3 = random.nextInt(3000);          work.process(data, n1, n2, n3);   // 使用回调函数          System.out.println(String.valueOf(n1) + "+" + String.valueOf(n2) + "+"                 + String.valueOf(n3) + "=" + data.value);      }      public static void main(String[] args)      {          Thread thread = new MyThread3(new Work());          thread.start();      }  }

上記のコードの処理メソッドはコールバック関数と呼ばれます。本質的に、コールバック関数はイベント関数です。 Windows API では、API を呼び出すプログラム間でデータをやり取りするためにコールバック関数がよく使用されます。したがって、コールバック関数を呼び出すプロセスは、イベントをトリガーする本来のプロセスです。この例では、 process メソッドを呼び出してデータを取得することは、 run メソッドでイベントをトリガーすることと同じです。

以上がJavaでスレッドにデータを渡す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は亿速云で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?Mar 17, 2025 pm 05:46 PM

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?Mar 17, 2025 pm 05:45 PM

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

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

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?Mar 17, 2025 pm 05:43 PM

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

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

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール