簡體   English   中英

靜態方法調用帶有對象引用作為參數的另一個靜態方法:線程安全嗎?

[英]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 variablesresources ,它都是線程安全的。

只要您不直接從每個線程中調用second它都是線程安全的。 為此,您應該考慮將second作為私有方法。

a,b和c是什么樣的物體? 因為這只是將內容添加到列表中,然后調用另一個靜態方法,所以我看不到任何問題

所以是的,它的線程安全。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM