1

私は静的メソッドを持っており、それ自体で別の静的メソッドを呼び出しています。

例えば ​​:

public List<Object> static first(int id){

       List<Object> list=new ArrayList<Object>();
       list.add(a);
       list.add(b);
       list.add(c);

       //calling another static method   
       second(id,list);

       return list;

}

public String static second(int id,List<Object> listRef){

       listRef.add(a);
       listRef.add(b);
       listRef.add(c);


}

私の質問は:

複数のスレッドがpublic static method first(int id);異なる ID で呼び出しています。

これはスレッドセーフな方法ですか?メソッド内でarrayListを宣言しているため、その参照は他のスレッドによって共有される可能性があります。

問題は、配列が個々のスレッドスタックではなくヒープメモリに格納されていることです。したがって、多くのスレッドによる配列参照の共有が発生する可能性があると思います。

4

4 に答える 4

10

はい、スレッドセーフです。ArrayList はローカル変数であり、スレッドによって共有されません (明示的に何かを共有しない限り)。

この場合、すべてのスレッドが独自の ArrayList を持つだけです。

于 2013-07-26T12:07:51.687 に答える
2

それぞれthreadが の独自のコピーを取得しますmethodClass静的メソッドは、オブジェクトではなく に属するメソッドです。shared variablesまたはを操作しない限り、resourcesスレッドセーフです。

于 2013-07-26T12:25:31.307 に答える
1

a、b、c はどのようなオブジェクトですか? これはリストに何かを追加してから別の静的メソッドを呼び出すだけなので、問題は見られません

そうです、スレッドセーフです..

于 2013-07-26T12:10:32.750 に答える