java static靜態方法的並發性


在做一個web項目的時候需要做一個通用類去處理一些問題,想到這個類很多地方都有用到,又不想每次都new一個,因此就定義了里面的方法是靜態方法,然后又因為多個靜態方法都用到了同一個對象,結果定義了一個類的全局變量讓每個靜態方法去調用它,剛開始沒什么問題,后來項目上線沒多久就掛了,最后發現這樣做導致了多線程的並發問題,所以就想在這里記錄一下…

下面是一個例子,例如:

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); } }

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

訪問全局變量肯定會出現並發問題,這是毫無疑問的 
靜態方法內部的變量,都是局部變量,每次調用靜態方法時都會重新分配內存空間,所以是安全的

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM