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都有自己的method. 静态方法只是属于Class而不是对象的方法。只要您不操作任何shared variablesor resources,它就是线程安全的。

于 2013-07-26T12:25:31.307 回答
1

只要您不second直接从每个线程调用,它就是线程安全的。为此,您应该考虑制作second一个私有方法。

于 2013-07-26T12:09:32.503 回答
1

a、b 和 c 是什么类型的对象?因为这只是将东西添加到列表中,然后调用另一个静态方法,所以我没有看到任何问题

所以是的,它的线程安全..

于 2013-07-26T12:10:32.750 回答