6
A
回答
8
這聽起來像你指的是JLS的this section。這是保證所有基本類型 - 除了double
和long
- 所有的線程將看到實際寫入該變量一些值。 (隨着double
和long
,前四個字節可能已經寫一個線程,並通過另一個線程的最後四個字節,如在JLS,該節規定),但他們不一定會看到在相同值除非該變量被標記爲volatile
。
即使使用volatile
,x += 3
不是原子,因爲它是x = x + 3
,這確實讀取和寫入,並有可能寫入讀取和寫入之間x
。這就是爲什麼我們有AtomicInteger
和java.util.concurrent
中的其他實用程序。
0
這聽起來不對。
原子操作是一個強迫所有線程等待訪問資源直到另一個線程用它做。我不明白爲什麼其他數據類型是原子的,而其他的不是。
3
讓我們不要混淆原子與線程安全的。由於每個是兩個獨立的32位存儲,所以長寫和雙寫不是原子的。假設它們不是複合寫入(例如,i++
),存儲和加載非長/雙字段是完全原子的。
原子我的意思是,你不會讀一些亂碼對象儘可能多線程編寫不同對象與同場的結果。
從Java Concurrency In Practice 3.1.2
外的薄AIRE安全:當一個線程讀取的變量,而不 同步,它可能會看到一個過時的值,但是至少它看到 值實際上是通過一些線程放置在那裏的,而不是隨機的一些值 。對於所有變量都是如此,除了64位long和 double,它們不是易失性的。允許JVM將64位 讀取或寫入爲兩個不是原子的獨立32位操作。
0
揮發性具有其他語義不僅僅是編寫價值原子
這意味着其他線程能夠立即看到更新後的值(和它不能被優化掉)
相關問題
- 1. File.Move原子操作
- 2. 非原子操作
- 3. DerbyJS原子操作
- 4. 原子操作 - C
- 5. Memcached - GET和SET操作是否爲原子操作?
- 6. MongoDB中寫入操作的原子性是什麼意思?
- 7. 什麼是微控制器中的原子操作?
- 8. 爲什麼CAS(原子)操作比同步或易變操作更快
- 9. 什麼是=後跟==操作?
- 10. 什麼是MTMSREE PowerPC操作?
- 11. 什麼是語義操作?
- 12. 原子操作和原子交易
- 13. Redis中的原子操作
- 14. x86 128位原子操作
- 15. Riak的原子操作?
- 16. 拉推原子操作?
- 17. Django中的原子操作?
- 18. CUDA原子操作列表
- 19. CUDA中的原子操作
- 20. 寫一個原子操作
- 21. 讓兩個操作原子
- 22. Qt原子操作實現
- 23. ARM中的原子操作
- 24. 原子操作在C++
- 25. window.localStorage上的原子操作
- 26. 揮發和原子操作
- 27. Sequelize中的原子操作
- 28. 原子操作實現
- 29. 是FD_SET,FD_CLR ...原子操作嗎?
- 30. plot.lm錯誤:$操作是原子向量
你有一個源爲了這? – paislee 2012-04-02 20:51:05