在java的语言规格中,一开始就定义了一些原子的操作,如,char ,int 这些的赋值与引用是原子的,
例如,两个线程同时对int类型的字段n进行赋值,一个使n=123 ,一个线程使n=345.
那么最后n的值不是123就是345,而不用担心模式会混合在一起。
但long与double的指定,引用操作并不是不可分割的
如对于long类型的a 赋值 ,两个线程分别使其a = 1234L ,a = 5678L
结果可能为,1234L,也可能为5678L,也可能为12345678L,也可能0L,等其他的方式。
解决方法,
1、加synchronized内操作。
2、在前面加上volatile关键字,则这些字段的操作就会成为不可分割的了
本文探讨了Java语言规范中定义的一些原子操作,例如char和int类型的赋值与引用操作,并解释了为什么long和double类型的赋值操作并非总是原子的。文章还提供了解决方案,包括使用synchronized关键字和volatile关键字来确保操作的原子性。
1915

被折叠的 条评论
为什么被折叠?



