静态方法使用Object引用作为参数调用另一个静态方法:它是否安全?

时间:2013-07-26 12:06:34

标签: java thread-safety

我有静态方法,它在自己内部调用另一个静态方法。

例如:

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);


}

我的问题是:

多线程正在使用不同的ID调用public static method first(int id);

这是线程安全的方式还是不是?因为我在方法中声明了arrayList而且它的引用可能由其他线程共享。

  

问题是该数组存储在堆内存中而非个人中   线程Stack.So我认为由许多线程共享数组引用   可能会发生。

4 个答案:

答案 0 :(得分:10)

是的,它是线程安全的。您的ArrayList是一个局部变量,并不由线程共享(除非您明确地做了一些事情来共享它)。

在这种情况下,每个线程都只有自己的ArrayList。

答案 1 :(得分:2)

每个thread都有自己的method副本。静态方法只是属于Class而不是对象的方法。只要您不操纵任何shared variablesresources,它就是线程安全的。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

什么样的物品是a,b&amp; C?由于这只是将内容添加到列表中,然后调用另一个静态方法,我没有看到任何问题

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