[英]Static method calling another Static method with Object reference as parameter :Is It Thread Safe?
我有靜態方法,它正在內部調用另一個靜態方法。
例如 :
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時,我的引用可能由其他線程共享。
問題是數組存儲在堆內存中而不是單個線程堆棧中。所以我認為許多線程可能會共享數組引用。
是的,它是線程安全的。 您的ArrayList是一個局部變量,不會被線程共享(除非您明確地做一些事情來共享它)。
在這種情況下,每個線程將僅具有自己的ArrayList。
每個thread
都有自己的method
副本。 靜態方法只是屬於Class
而不是對象的方法。 只要您不操作任何shared variables
或resources
,它都是線程安全的。
只要您不直接從每個線程中調用second
它都是線程安全的。 為此,您應該考慮將second
作為私有方法。
a,b和c是什么樣的物體? 因為這只是將內容添加到列表中,然后調用另一個靜態方法,所以我看不到任何問題
所以是的,它的線程安全。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.