java多线程学习笔记2---理解原子性和可见性

1.原子性

原子,从字面意思理解就是构成物质的基本单位,那么它就是不可分的,对于不能分割的操作就是原子操作,比如a=0,这个操作就是不能被分开的,把这种原子操作就称为原子性,原子操作在同一时刻是不能被多个线程同时访问的,所以不存在线程安全问题。然而还有很多操作都是可分的,就是非原子操作,就会存在线程安全问题,比如c=a+b;此操作就不属于原子操作,为了保证数据的安全性,就要进行线程同步。

2.可见性

可见性是相对于多个线程之间的,一个线程的操作,另外的线程是可见的,在java中使用volatile保证变量在多个线程之间是可见的,通过使用volatile关键字强制的从公共内存中读取变量的值,虽然变量具有可见性,但是对变量的操作不是原子操作,在并发的环境下还是会出现错误。所以volatile只保证可见性不保证原子性,而synchronized即保证原子性又保证可见性。

猜你喜欢

转载自blog.csdn.net/ai_wenkeyan/article/details/77747715