2011-06-21 6 views
1

は、ここでは、マルチスレッド方法のdoSomething()を実行するコード例関数の値はマルチスレッドで共有されていますか?以下

Class Abc { 

    void method1(){ 
     ExecutorService threadPool = Executors.newFixedThreadPool(10); 
     for(int i=0;i<100;i++){ 
     threadPool.execute(new Runnable() { 
      doSomeThing(Param); 
     }); 
     } 
     threadPool.shutdown(); 
    } 

    void doSomeThing(Param param){ 
     Object ref1,ref2,ref3,ref4; 
    } 
} 

あります。 doSomeThing()メソッドには多くのオブジェクト参照があります。

私の質問は、どのスレッドがオブジェクト参照の状態を変更した場合、この変更は、他のスレッドに表示されますでしょうか?

私は、自身の状態を持っているスレッドを作るために何をする必要があるかもしそうなら。私はこれを、execute()で渡しながらクラスの新しいインスタンスを作成することで修正できることを知っています。私は、彼らが同じスレッドでかじゃないか、doSomeThingへの各呼び出しは、変数の独自のセットを取得します。このスタイル

+0

クローンを使用しようとします。 ** ref1.Type ref = ref1.clone(); ** –

+0

ref1、ref2などは、パラメータからその値を取得しますか? – Marcelo

+0

はいこれはパラメータから値を取得しています – Madhu

答えて

0

で問題を解決しようとしています。

変数は、各呼び出しで設定した値と同じになります。

+0

doSomeThing()メソッドがAbcの同じインスタンスでマルチスレッドで実行されても、関数変数ref1、ref2 .. stateは変更されませんか? – Madhu

+0

@Madhu:変数の内容によって異なります。 – SLaks

0

私の質問は、どのスレッドがオブジェクト参照の状態を変更した場合、この変更は、他のスレッドに表示されますでしょうか?

とシンプルな答えはイエスです。しかし、これはあまりにも簡単ではありません。

あなたが求めているのは、マルチスレッドの概念にとって基本的なことです。基本的に同じオブジェクトを複数のスレッドに一度に渡すと、各スレッドがオブジェクトに対して行う変更を慎重に振り分けなければならないか、予期しない結果が生まれる必要があります。

関連する問題