java--可见性、volatile

1)线程是如何操作变量的?

    线程在访问一个变量的时候,可能会在线程自己的寄存器中缓存一个变量的副本,在被修改后的某一个时刻,再将修改刷新到主存去。因此,线程可能读取不到最新的变量值。,因为其他线程对变量的修改可能还没被刷新到主存,或者本线程的变量副本还未更新。

    这种情况,称之为变量不具有可见性。

2)而volatile修饰的变量,每次读取,都会直接从主存中读取,每次写入,都会直接写入到主存中去。因此,称具有这种特性的变量,是有可见性的。即,一个线程修改完共享变量后,其他线程能立刻看到修改。

3)volatile关键字仅能保证可见性,不能保证原子性,所以不能代替锁以及同步控制。

你可能感兴趣的:(java--可见性、volatile)