• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数のスレッドから1つのスレッドの関数を呼び出す場合、順次呼び出したいのですがどうしたらいいですか?)

複数のスレッドから1つのスレッドの関数を順次呼び出した場合の動作について

このQ&Aのポイント
  • 複数のスレッドから1つのスレッドの関数を順次呼び出した場合の動作について教えてください。
  • スレッドが8個ある場合、あるスレッドが別のスレッドの関数を呼び出す場合、順次呼び出されるのか、それとも並列処理されるのかを教えてください。
  • 具体的な例として、スレッド1がgetHoge()を呼び出し、その後、スレッド2もgetHoge()を呼び出した場合、スレッド2はスレッド1が終了するまで待つのか、それとも並列で実行されるのか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

まず勘違いしているのは Threadを継承したクラスのメソッドだからといって そのメソッドが別スレッドで実行されるわけではないということです。 Thread#run内の処理が別スレッドで起動するだけです。 スレッド1からgetHogeを呼び出せばgetHogeは スレッド1上で実行され スレッド2からgetHogeを呼び出せば スレッド2上で実行されます。 synchronized public int getHoge() とすれば getHogeが複数のスレッドから呼び出されても同時に走る事はありません。 (スレッド1とスレッド2が同時に呼び出そうとすれば、どちらかが待機状態になります。) synchronizedを宣言しなければ スレッド1とスレッド2からgetHogeが同時に呼ばれる可能性があります。

すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.4

「getHoge()を呼び出した」所の処理がどうなっているのか分からないので、同じく参考意見で。 たぶん、wait()とかnotifyAll()を利用すればいいだけだと思うけど・・。 マルチスレッドプログラミング 5章 スレッドの同期 5.2. スレッド間の待ち合わせ http://www.techscore.com/tech/J2SE/Thread/5-2.html マルチスレッドの同期 3スレッド以上の同期 http://ash.jp/java/sync.htm java.lang クラス Object http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/Object.html

すると、全ての回答が全文表示されます。
  • thamansa
  • ベストアンサー率40% (95/232)
回答No.3

>スレッド1、スレッド2、スレッド3から >スレッド5の関数を呼び出したとする。 この記述から察するにどこかで勘違いなさっていると思います。 (スレッドとプロセスは違いますが、)本件の場合、 プロセスが8つあって、プロセス1と2と3が、 それぞれのプロセスの中で getHoge()、getHoge()、getHogeHoge()を 呼び出すのと同じような動きになります。 つまり、互いに干渉せず、並列に実行されます。 質問の回答とすると、 スレッド2がgetHoge()を呼び出せば、 スレッド1が呼び出したgetHoge()が終わっていなくても スレッド2のgetHoge()が並列に実行開始されます。

すると、全ての回答が全文表示されます。
  • auty
  • ベストアンサー率58% (284/486)
回答No.2

スレッド1、スレッド2、スレッド3が共にTThread のインスタンスなら、 この場合、getHoge()はそのインスタンスメソッドだから全く関係なく独立に実行されるのでは。(並列処理)

すると、全ての回答が全文表示されます。

関連するQ&A