关键字volatile的作用是强制从公共堆栈中取得变量的值,而不是从线程私有数据栈中取得变量的值。

使用volatile关键字增加了实例变量在多个线程之间的可见性。但volatile关键字最致命的缺点是不支持原子性。

volatile解决的是变量在多个线程之间的可见性,而synchronized关键字解决的是多个线程之间访问资源的同步性。

使用原子类进行i++操作

import java.util.concurrent.atomic.AtomicInteger;public class AtomicIntegerThread extends Thread{// 原子类private AtomicInteger count = new AtomicInteger(0);@Overridepublic void run(){for(int i=0; i<10000; i++){System.out.println(count.incrementAndGet());}}
}public class Run {public static void main(String[] args){AtomicIntegerThread countService = new AtomicIntegerThread();Thread t1 = new Thread(countService);t1.start();Thread t2 = new Thread(countService);t2.start();Thread t3 = new Thread(countService);t3.start();Thread t4 = new Thread(countService);t4.start();Thread t5 = new Thread(countService);t5.start();}
}

线程:volatile关键字相关推荐

  1. 【Java 并发编程】线程指令重排序问题 ( 指令重排序规范 | volatile 关键字禁止指令重排序 )

    文章目录 总结 一.指令重排序规范 二.指令重排序示例 总结 Java 并发的 333 特性 : 原子性 : 每个操作都是 不可拆分的原子操作 ; 在线程中进行 a++ 就不是原子操作 , 该操作分为 ...

  2. 【Java 并发编程】线程简介 ( 原子操作 | volatile 关键字使用场景 )

    文章目录 一.原子操作 二.volatile 关键字使用场景 一.原子操作 原子操作 : read : 从 主内存 中的线程共享变量中读取数据 ; load : 将从主内存读取到的数据 , 加载到 线 ...

  3. 【Java线程】深入理解Volatile关键字和使用

    目录 背景 volatile原理 volatile特性 可见性 有序性 原子性 使用场景 背景 理解volatile底层原理之前,首先介绍关于缓存一致性协议的知识. 背景:计算机在执行程序时,每条指令 ...

  4. java和线程相关的关键字有哪些_Java中有哪些机制来保证线程安全?synchronized关键字和volatile关键字...

    想要解决线程安全问题,首先要知道为什么会造成线程不安全? 在单线程中,我们从来没有提到个线程安全问题,线程安全问题是只出现在多线程中的一个问题.因为多线程情况下有共享数据,每个线程都共享这些数据并对这 ...

  5. 【线程】——volatile关键字

    volatile 1.什么是volatile? volatile是JAVA虚拟机提供的轻量级的同步机制.在前面线程安全的文章中提到了内存可见性问题.volatile就是保持了内存可见性,Java编译器 ...

  6. volatile关键字和Java线程安全问题

    一.java中的线程安全问题 我们都知道,Java是一种夸平台的语言,因此Java这种语言在处理线程安全问题的时候,会有自己的处理机制,例如volatile关键字,synchronized关键字,并且 ...

  7. 20200428 线程安全(上)--彻底搞懂volatile关键字

    计算机在处理数据的过程中为什么会出现线程不安全的问题. 计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中会涉及到数据的读取和写入.由于程序运行过程中的临时数据是存放在主存(物理内存) ...

  8. 并发底层原理:线程、资源共享、volatile 关键字

    并发底层原理:线程.资源共享.volatile 关键字 1.线程 1.1 定义任务 1.2 Thread 类 1.3 使用 Executor 1.4 从任务中产生返回值 1.6 优先级 1.7 后台线 ...

  9. 线程安全、volatile关键字、原子性、并发包、死锁、线程池

    [线程安全.volatile关键字.原子性.并发包.死锁.线程池] 内容 线程安全 synchronized关键字\Lock接口 同步代码块 同步方法 Lock锁 高并发可见性问题 volatile关 ...

最新文章

  1. 中国AI开发者真实现状:写代码这条路,会走多久?
  2. Web应用扫描测试工具Vega
  3. 以下选项不是python打开方式的是-模拟试卷 A
  4. 快速深入一门语言的几个问题 - Shell909090 - 随笔杂记
  5. [转]]将 ASP.NET MVC3 Razor 项目部署到虚拟主机中
  6. 【每周CV论文】深度学习图像降噪应该从阅读哪些文章开始
  7. 这两天做项目出现的几个问题
  8. 洛谷 P1903 [国家集训队]数颜色 / 维护队列
  9. LeetCode 1971. Find if Path Exists in Graph(图的遍历)
  10. 回溯法在解决八皇后问题中的应用
  11. android 两个imageview重叠,android-在现有ListVIew中添加更多项目时,ImageView重叠
  12. ajax 中文日历显示
  13. Java会走向晦暗吗?Kotlin会取而代之吗
  14. 【Cesium】Cesium三维模型调整
  15. vscode 字体大小和行间距设置
  16. 【世界精品宝珀腕表win7主题】
  17. Android USB打印机
  18. 【考试总结】[CQOI2017]考试总结
  19. zblog修改上传服务器,zblog模板怎么上传?zblog模板怎么替换logo?zblog及zblog模板和插件...
  20. Python配置清华镜像源

热门文章

  1. 绝对干货,教你4分钟插入1000万条数据到mysql数据库表,快快进来
  2. typeof和instanceof 运算符
  3. JavaScript之Style属性学习
  4. bzoj 3223: Tyvj 1729 文艺平衡树
  5. 汇编语言随笔(9)-实验11(用条件转移指令来编写子程序)
  6. 重写equals所要遵守的约定
  7. 数据库水平切分的实现原理解析——分库,分表,主从,集群,负载均衡器
  8. mysql binlog日志优化及思路
  9. js字符串函数 [http://www.cnblogs.com/qfb620/archive/2011/07/28/2119799.html]
  10. Kafka使用入门教程