回答
擴大Michael的評論。
static
只是意味着不與包含類的實例關聯。
volatile
僅表示該值可能會被其他線程更改而不發出警告。
所以你的問題可以歸結爲「可以與另一個線程沒有警告地更改與包含類的實例沒有關聯的字段嗎?」
正如Michael指出的那樣,這個問題的答案是肯定的。實例關聯與併發修改是正交的。
現在,這就像一個非常棒的答案.. – 2011-03-27 19:45:36
http://stackoverflow.com/questions/2423622/volatile-vs-static-in-java – 2013-10-13 18:21:46
出於好奇,如果我們在那裏引入'final',會發生什麼? – Skynet 2015-03-17 09:22:23
當然。這兩種修飾語的效果是完全正交的。
是的,你可以。
A static
Java中的變量每個類存儲一次(不是每個對象一次,比如非靜態變量)。這意味着所有的對象(和靜態方法)共享相同的變量。
聲明變量爲volatile
(不管是否爲static
)聲明該變量將被多個線程頻繁訪問。在Java中,這可以歸結爲指示線程無法緩存變量的值,但必須在變異後立即寫回,以便其他線程看到變化。 (默認情況下,Java中的線程可以自由緩存變量)。
另一個有趣的問題是:靜態變量和靜態變量之間是否存在差異?我曾經讀過靜態變量不被線程緩存,所以用volatile來聲明一個靜態變量並不是真的有必要嗎?對此有何評論? – basZero 2014-04-09 12:03:27
確實存在差異,並且從答案中推導出:每個類存儲一次「靜態」變量。每個類存儲一個「static volatile」變量_and_將被多個線程頻繁訪問,即讀取不能被緩存。 – 2014-04-09 18:15:42
- 1. 將volatile變量定義爲extern int
- 2. 我可以在Objective-C中將UIView定義爲變量嗎?
- 3. 將在「init」中定義的servlet實例變量標記爲「volatile」
- 4. volatile變量的間接變化可以視爲未定義的行爲?
- 5. 未定義的變量可以在java函數中使用嗎?
- 6. 我應該將共享靜態變量指定爲volatile嗎?
- 7. 可以將線程安全對象定義爲Readonly變量嗎?
- 8. 我可以將變量定義爲參數嗎?
- 9. 在Java中使用volatile變量
- 10. Java volatile變量,多線程
- 11. 可以在css中定義常量嗎?
- 12. 您可以在PHP的類方法中定義類變量嗎?
- 13. 我可以在XAML中定義一個變量嗎?
- 14. 你可以在Coldfusion中一次性定義多個變量嗎?
- 15. 可以在劇本中定義ansible_tmp變量嗎?
- 16. scrapy可以在設置中設置自定義變量嗎?
- 17. 我可以訪問在玉模板中定義的變量嗎?
- 18. 你可以在Salt Pillar中定義一個變量嗎?
- 19. 在函數中將volatile變量作爲常量參數傳遞
- 20. Java中的volatile變量問題
- 21. 應該將「initCount」變量聲明爲「volatile」嗎?
- 22. 我可以只爲複合命令定義環境變量嗎?
- 23. 定義在linux變量可以在PHP
- 24. 在Java中,可以將非原始類型視爲常量嗎?
- 25. 我可以將php $ _POST變量轉換爲jQuery變量嗎?
- 26. 我可以在Objective-C中將協議作爲類變量嗎?
- 27. 在C++中,我可以將類類型表示爲變量嗎?
- 28. 使用Symfony Framework可以將數組定義爲常量嗎?
- 29. 您可以將未定義的變量設置爲函數參數嗎?
- 30. 我可以操縱變量在Java中變化的方式嗎?
你試過了嗎?發生了什麼? – Mat 2011-03-27 19:35:06
此網站不是谷歌和閱讀文檔的替代品。這不是一個網站給你帶來「現成」的答案。您應該提出與編程相關的特定問題,以便您無法通過正常搜索輕鬆找到答案。如果你想得到好的答案,你至少應該試着清楚你的問題(拼寫,大小寫,代碼格式計數)。大約30多年的谷歌搜索可以找到這個問題的答案。 – Mat 2011-03-27 19:43:31
@沙拉布:就是這一點。問問題是否可以自己輕鬆找到答案?本網站不打算讓人們提出問題,因爲他們喜歡這樣,這是爲了幫助有問題的人,最好是在他們自己去處理問題之後。而不是花30s自己找答案,而是用幾分鐘的時間來回答你應該能夠回答自己的問題。 – Mac 2011-03-27 19:57:32