Java中的volatile的作用和synchronized作用
volatile该关键字是主要使用的场合是字啊多个线程中可以感知实例的变量被更改了并且可以获取到最新的值进行使用,也就是用多线程读取共享变量的时候可以获取到最新的值使用。不能保障原子性
如果你在jvm中传递-server时候会导致这个运行的栈会在私有内存中而不是在共享内存中。
而synchronized是指的是同步的关键字,也就是说这个是线程同步的关键字。可以保障数据在并发的时候保证数据的原子性
测试代码:
MyThreadByVolatile
1 package cn.lonecloud; 2 /** 3 * 使用volatile关键字进行限制 4 * @Title: MyThreadByVolatile.java 5 * @Package cn.lonecloud 6 * @Description: 7 * @author lonecloud 8 * @date 2016年9月5日 下午4:08:00 9 */ 10 public class MyThreadByVolatile extends Thread{ 11 //添加volatile关键字 12 volatile public static int m=0; 13 @Override 14 public void run() { 15 for (int i = 0; i < 1000; i++) { 16 m++; 17 } 18 System.out.println(Thread.currentThread().getName()+" "+m); 19 } 20 }
View Code
MyThreadBySynchronized
1 package cn.lonecloud; 2 /** 3 * 使用synchronized同步方法进行 4 * @Title: MyThreadBySynchronized.java 5 * @Package cn.lonecloud 6 * @Description: 7 * @author lonecloud 8 * @date 2016年9月5日 下午4:08:56 9 */ 10 public class MyThreadBySynchronized extends Thread { 11 public static int m=0; 12 @Override 13 synchronized public void run() { 14 for (int i = 0; i < 100; i++) { 15 m++; 16 } 17 System.out.println(Thread.currentThread().getName()+" "+m); 18 } 19 }
View Code
VolatileTest
1 package cn.lonecloud; 2 /** 3 * 测试类 4 * @Title: VolatileTest.java 5 * @Package cn.lonecloud 6 * @Description: 7 * @author lonecloud 8 * @date 2016年9月5日 下午4:09:15 9 */ 10 public class VolatileTest { 11 public static void main(String[] args) { 12 Thread thread[]=new Thread[100]; 13 for (int i = 0; i < 100; i++) { 14 thread[i]=new MyThreadByVolatile();//结果为99591总是少 15 // thread[i]=new MyThreadBySynchronized(); 16 } 17 for (int i = 0; i < thread.length; i++) { 18 thread[i].start(); 19 } 20 } 21 }
View Code
结果如果使用volatile没有保证数据的稳定
使用synchronized则有
转载于:https://www.cnblogs.com/lonecloud/p/5842721.html
Java中的volatile的作用和synchronized作用相关推荐
- 面试:说说Java中的 volatile 关键词?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | Matrix海子 来源 | https://w ...
- 如何理解 JAVA 中的 volatile 关键字
如何理解 JAVA 中的 volatile 关键字 最近在重新梳理多线程,同步相关的知识点.关于 volatile 关键字阅读了好多博客文章,发现质量高适合小白的不多,最终找到一篇英文的非常通俗易懂. ...
- java中的Volatile关键字使用
文章目录 什么时候使用volatile Happens-Before java中的Volatile关键字使用 在本文中,我们会介绍java中的一个关键字volatile. volatile的中文意思是 ...
- Java中的Volatile如何工作? Java中的volatile关键字示例
如何在Java中使用Volatile关键字 在Java采访中,什么是volatile变量以及何时在Java中使用volatile变量是Java 采访中一个著名的多线程采访问题 . 尽管许多程序员都知道 ...
- java中二进制怎么说_面试:说说Java中的 volatile 关键词?
volatile 这个关键字可能很多朋友都听说过,或许也都用过.在 Java 5 之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在 Java 5之后,volatile 关 ...
- 深入理解Java中的volatile关键字
在再有人问你Java内存模型是什么,就把这篇文章发给他中我们曾经介绍过,Java语言为了解决并发编程中存在的原子性.可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized ...
- java中的volatile和synchronized
参考:http://blog.csdn.net/wanghai__/article/details/6260178 这个可能是最好的对比volatile和synchronized作用的文章了.vola ...
- java中的Volatile 变量
Java 语言中的 volatile 变量可以被看作是一种 "程度较轻的 synchronized":与 synchronized 块相比,volatile 变量所需的编码较少,并 ...
- java中的volatile变量
同步与线程间通信: 通信 通信是指消息在两条线程之间传递. 既然要传递消息,那接收线程 和 发送线程之间必须要有个先后关系,此时就需要用到同步.通信和同步是相辅相成的. 同步 同步是指,控制多条 ...
- 自顶向下彻底理解 Java 中的 volatile 关键字
标题 neta 自<计算机网络自顶向下> 思维导图 volatile 在 Java 中被称为轻量级 synchronized.很多并发专家引导用户远离 volatile 变量,因为使用它们 ...
最新文章
- mysql 修改某列数据_mysql修改表某列数据问题
- dig挖出DNS的秘密
- openssl/ssl.h file not found mac 完美解决
- ajax 遍历select 下拉框
- COW奶牛!Copy On Write机制了解一下
- python 操作 excel
- 鸟哥的Linux私房菜(基础篇)-第二章、 Linux 如何学习(二.2. 鸟哥的Linux苦难经验全都录)
- 小白安装eclipse插件—testNG
- python面向对象-4类的继承与方法的重载
- mysql function函数_详解MySQL如何按表创建千万级的压测数据
- c# winform 程序打包部署
- (53)FPGA条件选择(casez)
- DICOM查询/获取信息模型的研究及关系数据库实现
- tcp报文 如何判断是否为握手_“三次握手,四次挥手”你真的懂吗?
- XILINX FPGA数字信号处理——1、信号处理概论
- python语法错误怎么办_Python中出现语法错误时解决方法
- 2012年8月传统编程语言就业趋势分析(图)
- MarkdownNote
- 【task09】集合运算---内连结
- webpack-dev-server(devServer)