2016-09-26 8 views
1

複数のスレッドを1つのインスタンスで作成することと、スレッドごとに別々のインスタンスを作成することの違いは何ですか?最初のアプローチはいつ使うべきですか?私は例を挙げて、2つの概念をより明確に理解することができますか?似たような話題はほとんど見つかりませんでしたが、私は2つのアプローチの両方のコントラストを完全に理解することができませんでした。Runnable VSの単一インスタンスで複数のスレッドを作成する。スレッドごとに別のインスタンスがある

+2

最初のアプローチは本当に良いものではありません... – dit

+1

@ditあなたがスレッドプールを作成している場合を除き、あなたは自分自身を書くのではなく、組み込みのものを使うべきです。 ;) –

答えて

1

違いは何ですか...?

差--- 全体差が--- Runnableクラスは、1つまたは複数のフィールドを有する場合、スレッドの全てが与えられた場合、これらのフィールドは、複数のスレッドで共有されることです同じインスタンスであり、各スレッドに独自のインスタンスが与えられている場合は共有されません。

Runnableクラスでフィールドが宣言されていない場合、実質的に違いはありません。

基本的には、プログラム内のどのデータをスレッド間で共有し、どのデータを共有しないかを決めるのはあなた次第です。

Runnableすべてのフィールドが共有されている場合は(あなたがすべてのスレッドで同じRunnableインスタンスを使用している場合、すなわち、)、、それは難しいあなたがが共有されていない任意のデータを持っているために作るということ。

1

各スレッドがまったく同じ場合は、複数のスレッドにわたって同じRunnableを使用できます。これはほとんど役に立ちません。あなたはスレッドプール内のスレッドをこのように動作させることができますが、この場合、私は組み込みのスレッドプールを使用し、独自のものは作成しません。

異なるスレッドを別の状態にする必要がある場合は、Runnableが状態を保持しているため、スレッドごとに異なるRunnableが必要になります。これは、コードが同じであっても、異なるデータを処理する必要のあるスレッドがある場合に便利です。

関連する問題