博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
volatile关键字与synchronization关键字的区别?
阅读量:5155 次
发布时间:2019-06-13

本文共 602 字,大约阅读时间需要 2 分钟。

    在我们平时写代码需要同步的时候我们都会想到要使用同步锁(synchronization),但是我们都知道这个是效率比较低的。我了解了一个新的一个关键字,那就是volatile,这个的关键字它是Java语言提供了一种稍弱的同步机制,即volatile变量,用来确保将变量的更新操作通知到其他线程。当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatile类型的变量时总会返回最新写入的值。

使用volatile的前提条件:

  1、对变量的写操作不依赖于当前值

  2、该变量没有包含在具有其他变量的不变式中 简单来说,就是保证该操作是原子性操作

接下来我们来看两张图: 

  图左,是没有加volatile关键字的,原始线程的变量保存,要先存在工作内存中,在写入主内存。所以用户可能用到的是脏数据。

  图右,是加了volatile关键字后的线程,变量跳过工作内存直接写入主内存,保证了线程的可见性。

接下来就是volatile关键字与synchronization关键字的区别之处

好了,今天的分享就到这里了,谢谢大家。

转载于:https://www.cnblogs.com/huangzhixin/p/10071441.html

你可能感兴趣的文章
Sharepoint 2013搜索服务配置总结(实战)
查看>>
博客盈利请先考虑这七点
查看>>
使用 XMLBeans 进行编程
查看>>
写接口请求类型为get或post的时,参数定义的几种方式,如何用注解(原创)--雷锋...
查看>>
【OpenJ_Bailian - 2287】Tian Ji -- The Horse Racing (贪心)
查看>>
Java网络编程--socket服务器端与客户端讲解
查看>>
List_统计输入数值的各种值
查看>>
学习笔记-KMP算法
查看>>
Timer-triggered memory-to-memory DMA transfer demonstrator
查看>>
跨域问题整理
查看>>
[Linux]文件浏览
查看>>
64位主机64位oracle下装32位客户端ODAC(NFPACS版)
查看>>
获取国内随机IP的函数
查看>>
今天第一次写博客
查看>>
江城子·己亥年戊辰月丁丑日话凄凉
查看>>
IP V4 和 IP V6 初识
查看>>
Spring Mvc模式下Jquery Ajax 与后台交互操作
查看>>
(转)matlab练习程序(HOG方向梯度直方图)
查看>>
『Raid 平面最近点对』
查看>>
【ADO.NET基础-数据加密】第一篇(加密解密篇)
查看>>