Volatile

使变量在多个线程可见
每一个线程都会有一块工作内存区
其中,存放着所有线程共享的主内存中的变量值的拷贝

当线程执行时
在自己的工作区内存中,操作这些变量

共享内存

当主内存中变量值改变时,会写到相应线程的工作内存中
为了存取一个共享变量,一个线程通常,先获取锁定,并去清除它的内存工作区

把这些共享变量从所有线程的共享内存中,正确的装载到它自己所在工作内存中,当线程解锁时,保证该工作内存区中变量的值,回写到共享内存中

Volatile作用

强制线程到主内存,共享内存里去读取变量,而不去线程工作内存区中读取
从而,实现了多个线程间的变量可见,线程的安全可见性

package com.bjsxt.base.sync007;public class RunThread extends Thread {private volatile boolean isRunning = true;private void setRunning(boolean isRunning) {this.isRunning = isRunning;}public void run() {System.out.println("进入run方法..");int i = 0;while (isRunning == true) {// ..}System.out.println("线程停止");}public static void main(String[] args) throws InterruptedException {RunThread rt = new RunThread();rt.start();Thread.sleep(1000);rt.setRunning(false);System.out.println("isRunning的值已经被设置了false");}}

运行

Volatile可见性相关推荐

  1. java 可见性_Java并发编程-volatile可见性详解

    前言 要学习好Java的多线程,就一定得对volatile关键字的作用机制了熟于胸.最近博主看了大量关于volatile的相关博客,对其有了一点初步的理解和认识,下面通过自己的话叙述整理一遍. 有什么 ...

  2. volatile可见性MESI协议volatile

    volatile 的作用 volatile 的主要作用有三点: - 保证变量的内存可见性 ,有序性(禁止指令重排序),不保证原子性. 可见性 简单解释:指当多个线程访问同一个变量时,一个线程修改了这个 ...

  3. Volatile可见性、缓存一致性协议、指令重排、内存屏障 - 手写笔记

  4. Volatile可见性底层实现原理

  5. Java并发,volatile+不可变容器对象能保证线程安全么?!

    <Java并发编程实战>第3章原文 <Java并发编程实战>中3.4.2 示例:使用Volatile类型来发布不可变对象 在前面的UnsafeCachingFactorizer ...

  6. 死磕Java并发:Java内存模型之分析volatile

    近期活动:加班的你,需要一束光 本文转载自公众号: Java技术驿站 前篇文章<死磕Java并发:深入分析volatile的实现原理>中已经阐述了volatile的特性了: volatil ...

  7. Java并发编程——volatile

    引 volatile可以看成是轻量级的低配版的Synchronized,他主要是作用于共享变量,保证共享变量的可见性.确保共享变量在主内存中一致地准确的更新通知到各个线程,这是Volatile的可见性 ...

  8. Java 多线程之 synchronized 和 volatile 的比较

    概述 在做多线程并发处理时,经常需要对资源进行可见性访问和互斥同步操作.有时候,我们可能从前辈那里得知我们需要对资源进行 volatile 或是 synchronized 关键字修饰处理.可是,我们却 ...

  9. 如何理解 JAVA 中的 volatile 关键字

    如何理解 JAVA 中的 volatile 关键字 最近在重新梳理多线程,同步相关的知识点.关于 volatile 关键字阅读了好多博客文章,发现质量高适合小白的不多,最终找到一篇英文的非常通俗易懂. ...

最新文章

  1. 单片机编程好学吗?单片机初学者怎样看懂代码?
  2. 聊聊底线 | 坏数据与假数据
  3. 本地导入Android-PullToRefresh库问题解决
  4. 简单的点击展开/关闭效果
  5. Linux系统基础优化
  6. 手撕设计模式之「工厂方法模式」(Java描述)
  7. 产品必懂技术术语(后台类)
  8. python / 内置的数据结构概述
  9. Docker:恢复对开源项目的无限制访问
  10. 高等数学下-赵立军-北京大学出版社-题解-练习9.2
  11. wps分享为什么要登入_[win]为什么你需要便携应用?portableapps让你得心应手.
  12. 怎么去调需要登录的接口_遇到需要的登录的网站怎么办?学好python,用这3招轻松搞定...
  13. Github windows客户端简单上手教程
  14. Java解析JSON的四种方式
  15. 2021爱分析·时尚品牌数字化厂商全景报告
  16. 泰克示波器存储格式,在存储时怎么选择?
  17. 【程序员如何买基金 五】挑选合适的指数和指数基金
  18. android 10.0 wifi开关控制
  19. 华为强推996工作制,程序员们的变态加班何时休?
  20. html前端代码的初步实现(一)

热门文章

  1. jmeter的性能监控框架搭建记录(Influxdb+Grafana+Jmeter)
  2. bzoj1791: [Ioi2008]Island 岛屿 单调队列优化dp
  3. 已经到了快元旦,可是总是不自在
  4. Java容器类和包装类
  5. 一个回车引发的编译错误
  6. Google开源项目风格指南-笔记
  7. C++ Primer 5th笔记(chap 19 特殊工具与技术)type_info 类
  8. Opencv轻松入门:OpenCV入门难?资料少?看完这篇文章就稳了
  9. 串行、并行、并发总结
  10. 编写TA链接静态库的方法