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. 原子操作 - C
- 2. DerbyJS原子操作
- 3. File.Move原子操作
- 4. CUDA:还原还是原子操作?
- 5. Memcached - GET和SET操作是否为原子操作?
- 6. MongoDB中写入操作的原子性是什么意思?
- 7. 原子操作和原子交易
- 8. 挥发和原子操作
- 9. 写一个原子操作
- 10. x86 128位原子操作
- 11. ARM中的原子操作
- 12. 让两个操作原子
- 13. Qt原子操作实现
- 14. 原子操作实现
- 15. Django中的原子操作?
- 16. CUDA中的原子操作
- 17. CUDA原子操作列表
- 18. 原子操作在C++
- 19. Sequelize中的原子操作
- 20. 什么是=后跟==操作?
- 21. 什么是MTMSREE PowerPC操作?
- 22. 是FD_SET,FD_CLR ...原子操作吗?
- 23. plot.lm错误:$操作是原子向量
- 24. 是XMLDocument.Save一个原子操作?
- 25. 是一个比较原子操作吗?
- 26. Azure Put Blob操作是否为原子?
- 27. 是数据库操作原子
- 28. 函数调用中,操作符是什么,操作数是什么?
- 29. Cuda无符号短操作的原子操作
- 30. >>操作符/操作数/修饰符是做什么的?
你有一个源为了这? – paislee 2012-04-02 20:51:05