java多线程开发juc第一章:volatile内存可见性

当两个线程(线程A、线程B)操作共享数据时,共享数据存在于主存中,JVM会对线程A和线程B分配独立的内存,所以彼此的内存是不可见的,从而存在内存可见性问题。

如:线程A要对共享数据进行修改,线程B要对共享数据进行读取,当线程B执行效率高于线程A时,线程B读到的数据一直都是第一次在主存中读到的数据,无论线程B怎么修改,线程A读的数据一直都没改变(造成这种情况的原因是内存可见性问题)

解决方案:

1、加synchronized同步锁,但是效率较低,当有很多线程进行访问的时候,会出现阻塞的情况

2、用volatile关键字进行修饰,当多个线程操作共享数据时,可以保证内存的可见性问题,时一种较为轻量级的同步策略,相对于synchronized。

volatile注意事项:1、volatile不具备互斥性(如synchronized,当一个线程争到锁后,其他线程需要等待锁释放后,才能争到锁)2、volatile不能保证变量的原子性(不可在分割)

    原文作者:JUC
    原文地址: https://blog.csdn.net/hnjsjsac/article/details/80861031
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞