java static靜態方法的併發性

在作一個web項目的時候須要作一個通用類去處理一些問題,想到這個類不少地方都有用到,又不想每次都new一個,所以就定義了裏面的方法是靜態方法,而後又由於多個靜態方法都用到了同一個對象,結果定義了一個類的全局變量讓每一個靜態方法去調用它,剛開始沒什麼問題,後來項目上線沒多久就掛了,最後發現這樣作致使了多線程的併發問題,因此就想在這裏記錄一下…

下面是一個例子,例如:python

public class TestUtil { private static User user=new User(); public static void setName(String name){ //在靜態方法中調用了全局變量並進行了修改操做,線程不安全 user.setUsername(name); } public synchronized static void setName1(String name){ //在靜態方法中調用了全局變量並進行了修改操做,使用了同步關鍵字,線程安全 user.setUsername(name); } }

總結:只要你的靜態方法不訪問全局變量的話,就不會有併發問題web

訪問全局變量確定會出現併發問題,這是毫無疑問的 
靜態方法內部的變量,都是局部變量,每次調用靜態方法時都會從新分配內存空間,因此是安全的安全

也就是是說只要你的靜態方法不訪問全局變量的話,就不會有併發問題多線程

相關文章
相關標籤/搜索