2012-04-20 1 views
0

オブジェクトメソッドが実行されるスレッドは、それが作成されたスレッド上のスレッドによって異なりますか?Javaマルチスレッド:オブジェクトメソッドが実行されるスレッドは、スレッドが作成されたスレッドによって異なりますか?

JavaアプリケーションThread1とThread2に2つのスレッドがあり、ClassAとClassBの2つのクラスがあるとします。

Thread1でObjectOfClassAを作成し、次にThread2でObjectOfClassBを作成すると、ObjectOfClassBにはObjectOfClassAへの参照が含まれます。 ObjectOfClassBがObjectOfClassAのメソッドを実行すると、スレッドはそのメソッドを実行しますか?

あなたの回答には、関連するドキュメントへのリンクをご提供ください。

私が見たことに基づいて、オブジェクトメソッドの実行は、それが作成されたスレッドと完全に直交しているという感覚が得られますが、わかりません。

答えて

2

ThreadOでObjectOfClassAを作成し、ThreadOでObjectOfClassBを作成すると、ObjectOfClassBにはObjectOfClassAへの参照が含まれます。 ObjectOfClassBがObjectOfClassAのメソッドを実行すると、スレッドはそのメソッドを実行しますか? ObjectOfClassB自体の呼び出し元メソッドを実行している同じスレッド上

(それは私が推測...しかし@Andrzejに述べたように、それはあまりにも別の、第三のスレッドとすることができるスレッド2であろう)。これは、どのスレッドがどのオブジェクトを作成したかとは完全に独立しています。重要なことは、所与のオブジェクトがに公開されている(すなわち利用可能になっている)かどうかだけである。そうであれば、そのスレッドで実行できます。

+0

...もちろん、 'b.foo(a)'を呼び出す完全に別の第3のスレッドがあれば、そのメソッドはその3番目のスレッドで実行されます。 –

+0

@AndrzejDoyle、本当にありがとう。私はこの点を詳しく説明するためにさらに説明を加えました。 –

+0

"publishing"はJavaのオブジェクトで、オブジェクトへの参照を保持するのと同じものですか?私は今までこの言葉を聞いたことがありません。 – tjb

7

自動スレッド切り替えのようなものはありません。そのため、各メソッドの呼び出しは、オブジェクトが作成されたスレッドに関係なく、「現在のスレッド」で発生します。