volatile提供了弱同步机制,用来确保将变量更新通知到其它线程。volatile变量不会被缓存在寄存器中或者对其它处理器不可见的地方,因此在读取volatile变量时总会返回最新写入的值。可以想象成如下语义,然而volatile是更轻量级的同步机制。volatile只能确保可见性,但不能保证原子性。也就是说不能在复合操作用volatile变量,比如i++。

public synchronized void setValue(int value){

this.value = value;

}

public synchronized int getValue(){

return value;

}

当满足以下条件所有条件,才能使用volatile变量

  • 对变量的写入操作不依赖变量的当前值,或者你能确保只有单个线程更新变量值。

  • 该变量不会与其他状态变量一起纳入不变性条件

  • 在访问变量是不需要加锁

来自为知笔记(Wiz)

转载于:https://www.cnblogs.com/csu_xajy/p/4338348.html

Java并发编程之volatile变量相关推荐

  1. Java 并发编程之 volatile

    volatile变量是 Java 提供的另一种同步机制,保证线程之间的可见性,即一个线程对共享变量的修改能够立即被另一个线程看到. 使用也很简单,直接在变量前加 volatile 关键词: publi ...

  2. Java并发编程之volatile

    volatile可以说是Java虚拟机提供的最轻量级的同步机制,Java内存模型对volatile专门定义了一些特殊的访问规则. 当一个变量定义为volatile之后,它将具备两种特性,第一是保证此变 ...

  3. Java并发编程之volatile关键字

    大概是因为项目.业务的原因,工作上几乎还没有使用过多线程相关的功能,相关知识差不多都忘了,所以最近补一下基础. volatile用来修饰共享变量,volatile变量具有 synchronized 的 ...

  4. java并发编程之Volatile详解

    前言 在Java中多个线程对公共变量的操作并不是直接在内存中操作的,每一个线程都会有一块自己的工作内存.线程会先从主内存中获取到变量的值到工作内存中进行修改在更新到主内存.假如有两个线程同时对某个变量 ...

  5. java并发编程之4——Java锁分解锁分段技术

    转载自 java并发编程之4--Java锁分解锁分段技术 并发编程的所有问题,最后都转换成了,"有状态bean"的状态的同步与互斥修改问题.而最后提出的解决"有状态bea ...

  6. Java 并发编程之美:并发编程高级篇之一-chat

    借用 Java 并发编程实践中的话:编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作 ...

  7. Java 并发编程之美:并发编程高级篇之一

    借用 Java 并发编程实践中的话:编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作 ...

  8. Java并发编程之CAS第三篇-CAS的缺点

    Java并发编程之CAS第三篇-CAS的缺点 通过前两篇的文章介绍,我们知道了CAS是什么以及查看源码了解CAS原理.那么在多线程并发环境中,的缺点是什么呢?这篇文章我们就来讨论讨论 本篇是<凯 ...

  9. zbb20180929 thread java并发编程之Condition

    java并发编程之Condition 引言 在java中,对于任意一个java对象,它都拥有一组定义在java.lang.Object上监视器方法,包括wait(),wait(long timeout ...

最新文章

  1. cherrypy 入门笔记(1) hello world
  2. 【组合数学】生成函数 ( 使用生成函数求解多重集 r 组合数 )
  3. scala typetag java,scala – 从类型中获取TypeTag?
  4. C++函数模板的重载
  5. symbian 中自动寻找cmwap连接点,通杀uiq 2nd 3nd和s60 2nd 3nd 5nd
  6. python获取window共享目录列表_利用Python获取DICOM RTstructure勾画列表
  7. Linux 会成为主流桌面操作系统吗?
  8. neo4j call
  9. JavaAgent学习笔记
  10. python 一个包中的文件调用另外一个包文件 实例
  11. 用matlab绘制圆锥曲线,如何用几何画板绘制圆锥曲线?
  12. 平面设计什么情况下会用到对比构图与调和构图
  13. Java线程并发协作与任务定时调度
  14. ADS1256的使用
  15. Java根据日利率计算等额本息每月还款
  16. (亲测可用)如何在Win10家庭版中找回组策略编辑器
  17. Exception in thread main java.lang.RuntimeException: java.net.ConnectException错误问题
  18. python_paramiko模块用法
  19. 微信h5隐藏导航栏和状态栏_导航栏未在SwiftUI中隐藏
  20. 【计算机网络-自顶向下】3—Transport layer运输层(概述、多路复用与分解、UDP、可靠数据传输、TCP、拥塞控制)

热门文章

  1. magxfer FTP 组件 的使用例子
  2. SQL 基础之管理方案对象(十七)
  3. objective-c block 旧版详解
  4. mysql limit函数
  5. OBJECT_MODE
  6. android图片分辨率改变,android 通过修改图片像素实现CircleImageView
  7. easypoi导出word表格_Java导出word文档(POIamp;Spire.Doc)
  8. 如何在Linux中找到您的IP地址
  9. linux 每天_每天使用Linux的11种惊人方式
  10. 开源战略游戏源码_开源的历史告诉我们关于战略优势的知识