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作用相关推荐

  1. 面试:说说Java中的 volatile 关键词?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | Matrix海子 来源 | https://w ...

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

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

  3. java中的Volatile关键字使用

    文章目录 什么时候使用volatile Happens-Before java中的Volatile关键字使用 在本文中,我们会介绍java中的一个关键字volatile. volatile的中文意思是 ...

  4. Java中的Volatile如何工作? Java中的volatile关键字示例

    如何在Java中使用Volatile关键字 在Java采访中,什么是volatile变量以及何时在Java中使用volatile变量是Java 采访中一个著名的多线程采访问题 . 尽管许多程序员都知道 ...

  5. java中二进制怎么说_面试:说说Java中的 volatile 关键词?

    volatile 这个关键字可能很多朋友都听说过,或许也都用过.在 Java 5 之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在 Java 5之后,volatile 关 ...

  6. 深入理解Java中的volatile关键字

    在再有人问你Java内存模型是什么,就把这篇文章发给他中我们曾经介绍过,Java语言为了解决并发编程中存在的原子性.可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized ...

  7. java中的volatile和synchronized

    参考:http://blog.csdn.net/wanghai__/article/details/6260178 这个可能是最好的对比volatile和synchronized作用的文章了.vola ...

  8. java中的Volatile 变量

    Java 语言中的 volatile 变量可以被看作是一种 "程度较轻的 synchronized":与 synchronized 块相比,volatile 变量所需的编码较少,并 ...

  9. java中的volatile变量

    同步与线程间通信: 通信  通信是指消息在两条线程之间传递.  既然要传递消息,那接收线程 和 发送线程之间必须要有个先后关系,此时就需要用到同步.通信和同步是相辅相成的. 同步  同步是指,控制多条 ...

  10. 自顶向下彻底理解 Java 中的 volatile 关键字

    标题 neta 自<计算机网络自顶向下> 思维导图 volatile 在 Java 中被称为轻量级 synchronized.很多并发专家引导用户远离 volatile 变量,因为使用它们 ...

最新文章

  1. mysql 修改某列数据_mysql修改表某列数据问题
  2. dig挖出DNS的秘密
  3. openssl/ssl.h file not found mac 完美解决
  4. ajax 遍历select 下拉框
  5. COW奶牛!Copy On Write机制了解一下
  6. python 操作 excel
  7. 鸟哥的Linux私房菜(基础篇)-第二章、 Linux 如何学习(二.2. 鸟哥的Linux苦难经验全都录)
  8. 小白安装eclipse插件—testNG
  9. python面向对象-4类的继承与方法的重载
  10. mysql function函数_详解MySQL如何按表创建千万级的压测数据
  11. c# winform 程序打包部署
  12. (53)FPGA条件选择(casez)
  13. DICOM查询/获取信息模型的研究及关系数据库实现
  14. tcp报文 如何判断是否为握手_“三次握手,四次挥手”你真的懂吗?
  15. XILINX FPGA数字信号处理——1、信号处理概论
  16. python语法错误怎么办_Python中出现语法错误时解决方法
  17. 2012年8月传统编程语言就业趋势分析(图)
  18. MarkdownNote
  19. 【task09】集合运算---内连结
  20. webpack-dev-server(devServer)

热门文章

  1. org.springframework.beans.BeanUtils
  2. shell 判断执行结果 是否要推出
  3. 分布式跟踪系统:Zipkin
  4. oracle 的自增需要依靠序列和触发器共同实现
  5. Angular-Observable和RxJS
  6. css中em单位和rem单位
  7. 如何开发与设计一个爆款小游戏
  8. Mirage学习笔记
  9. 深圳车联网云服务商“麦谷科技”获5000万Pre A轮融资
  10. Ansible自动化运维笔记3(playbook)