我有静态方法,它在自己内部调用另一个静态方法。
例如:
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我认为由许多线程共享数组引用 可能会发生。
答案 0 :(得分:10)
是的,它是线程安全的。您的ArrayList是一个局部变量,并不由线程共享(除非您明确地做了一些事情来共享它)。
在这种情况下,每个线程都只有自己的ArrayList。
答案 1 :(得分:2)
每个thread
都有自己的method
副本。静态方法只是属于Class
而不是对象的方法。只要您不操纵任何shared variables
或resources
,它就是线程安全的。
答案 2 :(得分:1)
只要不直接从每个线程调用second
,它就是线程安全的。为此,您应该考虑将second
作为私有方法。
答案 3 :(得分:1)
什么样的物品是a,b&amp; C?由于这只是将内容添加到列表中,然后调用另一个静态方法,我没有看到任何问题
所以是的,它的线程安全..