請問任何人都可以告訴我什麼是java中的volatile關鍵字,它的主要功能,如何在同步塊中使用它,以及如果我們完全從塊中刪除它,會發生什麼?同步Java塊中volatile關鍵字的重要性是什麼?
0
A
回答
2
讓我們先從什麼是Java中的volatile變量:
在Java中volatile關鍵字被用來作爲指標到Java編譯器和線程沒有這個變量的緩存值,讀它從主內存
那麼什麼是從內存讀取變量值的利益,考慮下面的示例代碼:
public class Singleton{
private static volatile Singleton _instance; //volatile variable
public static Singleton getInstance(){
if(_instance == null){
synchronized(Singleton.class){
if(_instance == null)
_instance = new Singleton();
}
}
return _instance;
}
先前樣品中
:
1)我們只是在懶惰地第一請求的時間來創建實例一次
2)我們正在創建實例來。
如果我們不讓_instance變量變爲volatile,那麼創建Singleton實例的Thread將無法與其他線程通信,該實例已經創建,直到它出來Singleton塊,所以如果線程A創建Singleton實例並且在創建丟失了CPU之後,所有其他線程將無法將_instance的值看作非null,並且他們會認爲它仍然爲空。
結論:
volatile關鍵字將更加有用。當多個線程使用相同的變量時,每個線程將擁有自己的該變量的本地緩存副本。所以,當它更新值時,它實際上在本地緩存中更新,而不是在主變量內存中更新。另一個線程使用相同的變量不知道另一個線程更改的值
1
Java中的易失性關鍵字用作Java編譯器和線程的指示器,它不緩存該變量的值並始終從主內存讀取該變量。
+0
這也是爲了阻止編譯器重新排序與該變量相關的操作。 – 2013-04-20 11:10:25
相關問題
- 1. Java - 是否需要volatile同步?
- 2. volatile關鍵字
- 3. Java中的關鍵字volatile在單核機器上強制內存同步嗎?
- 4. Java中的native關鍵字是什麼?
- 5. 什麼是Java中的關鍵字?
- 6. 爲什麼在java中同步關鍵字慢?
- 7. Java 9中的java.se模塊的重要性是什麼?
- 8. java中的同步關鍵字
- 9. 在這個實例中需要「volatile」關鍵字嗎? (JAVA)
- 10. 我爲什麼要通過對象鎖關鍵字而同步
- 11. 關於該volatile關鍵字
- 12. Java中的「volatile」是什麼意思?
- 13. Java volatile關鍵字按預期工作
- 14. 什麼是Java的「自我」關鍵字
- 15. 通過ReentrantLock訪問字段是否需要volatile關鍵字?
- 16. 什麼是同步 - 屬性?
- 17. 沒有volatile關鍵字
- 18. C++中的對象的volatile關鍵字
- 19. 什麼是java中的線程同步?
- 20. Java中finally塊的要點是什麼?
- 21. 如何實現同步java關鍵字?
- 22. 關鍵字自身的重要性?
- 23. 爲什麼JavaScript函數需要關鍵字「異步」? 「await」關鍵字不夠嗎?
- 24. 此雙重檢查鎖是否需要volatile關鍵字才能起作用?
- 25. 關於引用類型的Java volatile關鍵字的問題
- 26. Volatile關鍵字對於非C/C++背景有什麼作用?
- 27. 爲什麼要避免Java中的C++關鍵字?
- 28. 關鍵字同步和同步概念
- 29. javascript的'this'關鍵字與java的'this'關鍵字有什麼不同?
- 30. 在C#中使用Volatile關鍵字
可以線程在同步塊內丟失CPU嗎?我不這麼認爲,即使創建後CPU丟失了,其他線程也不能進入synchronized塊中,直到線程A離開syn塊爲止,屆時_instance將刷新到主內存中,其他所有線程將會看到更新/最新值..我錯過了什麼?請幫我澄清我的疑問。提前致謝。 – Samra 2014-01-30 16:52:01
@Mark請問您可以對我的上述查詢發表評論嗎? – Samra 2014-01-31 06:53:29