先看一個類
public class Test{
public static String hello(String str){
String tmp="";
tmp = tmp+str;
return tmp;
}
}
hello方法會不會有多線程安全問題呢?沒有!!
靜態方法如果沒有使用靜態變量,則沒有線程安全問題。
爲什麼呢?因爲靜態方法內聲明的變量,每個線程調用時,都會新創建一份,而不會共用一個存儲單元。比如這裏的tmp,每個線程都會創建自己的一份,因此不會有線程安全問題
注意,靜態變量,由於是在類加載時佔用一個存儲區,每個線程都是共用這個存儲區的,所以如果在靜態方法裏使用了靜態變量,這就會有線程安全問題!
總結:只要方法內含有靜態變量,就是非線程安全的