本文介绍: 引用类型变量所指向的对象之所以可以修改, 是因为引用变量不是直接指向对象的数据, 而是指向对象的引用的. 所以被final修饰的引用类型变量将永远指向一个固定的对象, 不能被修改;Lock和synchronized不用说,都是互斥锁,保障了共享资源在同一时刻只有一个线程可以访问,就不会出现可见性的问题。volatile的有序性是指写入修改后的volatile变量这个操作必定优先于 读取这个变量。: final修饰的变量会指向一块固定的内存, 这块内存中的值不能改变.分析一下答案,能对的上的。
源码如下
猜想
1.为了保证线程安全,可以保证可见性
但是找了一些文档,没有明确表示,可以保证这一点
可实现方案如下:
可见性的技术保障
1、Lock
2、synchronized
3、原子类
4、volatile
Lock和synchronized不用说,都是互斥锁,保障了共享资源在同一时刻只有一个线程可以访问,就不会出现可见性的问题。
volatile保障了一个变量修改以后马上写回主内存让其他线程可以看到,具体的分析后面再说。
至于原子类为什么也有可见性,因为他里面的value本身也是volatile修饰的。
顺便说下有序性
疑问
智能搜索答案
疑问解答
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。