0

Runnable インターフェイスを実装する 2 つのオブジェクトがあります。

Thread_1およびThread_2オブジェクトがあるとします。

Thread_1にはグローバル変数myVariable がありますmyVariable変数を使用するメソッドmyMethod()

Thread_2にはThread_1型の変数があります

したがって、シナリオは次のとおりです。

両方のスレッド: Thread_1Thread_2が実行されています。

Thread_1が現在myMethod() ( myVariable を使用)を使用しており、同時にThread_2がThread_1を介してThread_1myVariableを使用している場合( myMethod()メソッドを呼び出さずに)、 myVaribale変数を同期する必要がありますか?

4

4 に答える 4

1

「myVaribale 変数を同期する必要がありますか?」

コードでアーカイブしようとしているものと、変数の型 (クラスまたはプリミティブ型の場合) によって異なります。同期は、ローカルで特定の問題として脅威であるに違いありません。ほとんどの場合、使用する標準的な手順はありません。

私が言えることは、このグローバル変数 は、両方のスレッドがすべての変更を認識できるようにするためにmyVariable、 である必要があるということです。volatile

于 2013-04-19T13:30:23.333 に答える
1

使用がメモリへの書き込みを意味するsynchronize場合は、使用する必要があります。アトミックについても検討する必要があるかもしれません。

Threadまた、変数とメソッドをsに入れないでください。Threadスレッド固有の機能を追加し、残りをRunnables またはシステムを構成する他のクラスに任せる場合にのみサブクラス化します。

于 2013-04-19T13:10:48.250 に答える
1

Thread_1 が現在 myMethod() (myVariable を使用) を使用し、同時に Thread_2 が Thread_1 の myVariable を使用している場合 --> 両方ともそれを使用しますか? 1 つは直接、もう 1 つはメソッドを介してですか?

この場合、変数はスレッド間で共有されるため、読み取り/書き込みがアトミックに行われるようにする必要があります。make が揮発性であるか、その AtomicXXX クラスを作成するか、明示的なロックを使用します。

PS 1 つのスレッドは別のスレッドのメンバーですか? 面白いデザイン

于 2013-04-19T13:12:48.703 に答える
0

myVariable へのアクセス方法は問題ではありません。複数のスレッドから(任意の変数に)アクセスしている限り、スレッドセーフでシンプルであることを確認する必要があります。volatile、AtomicReference、lock または synchronize など、達成しようとしていることに基づいて、これらのアプローチのいずれかを使用できます。

于 2014-02-27T16:30:26.457 に答える