原文:java volatile的一个验证反例

网上关于java volatile的资料已经不少了,但搜了好久也没看到谁用代码很好地验证过使不使用volatile的差异。最近自己写了个测试,意外的看到了两者的明显区别,为什么说意外呢,因为根据我的测试,在 位的JVM 以下均指oracle官方的JVM 上是看不出差异的,也就是说 位的JVM上,不会发生因为没使用volatile而引起的多个线程读写公共变量不同步问题 有误,见末尾的补充 ,偶然在 ...

2013-01-07 20:22 4 2653 推荐指数:

查看详情

volatile一个经典例子

volatile 关键字的两层语义 一旦一个共享变量(类的成员变量、类的静态成员变量)被 volatile 修饰之后,那么就具备了两层语义: 1)保证了不同线程对这个变量进行操作时的 可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。 2)禁止进行 指令重排 ...

Mon Nov 12 00:31:00 CST 2018 0 2647
java之用volatile和不用volatile的区别

转载:http://blog.csdn.net/feier7501/article/details/20001083 在当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续 ...

Wed Feb 22 00:23:00 CST 2017 0 2285
java中的volatile变量

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

Sun Mar 04 19:42:00 CST 2018 0 1893
Java并发编程(二) —— volatile

一、介绍 volatile保证共享变量的“可见性”。可见性指的是当一个线程修改变量时,另一个线程能读到这个修改的值。 这里就要提出几个问题。 问题1:为什么一个线程修改时,另一个线程可能会“看不见”? 问题2:这种可见性是如何实现的? 二、问题1 变量为何“不可见” 回答 ...

Thu May 16 04:00:00 CST 2019 0 620
谈谈Java中的volatile

内存可见性 留意复合类操作 解决num++操作的原子性问题 禁止指令重排序 总结 内存可见性   volatileJava提供的一种轻量级的同步机制,在并发编程中,它也扮演着比较重要的角色。同synchronized相比(synchronized通常称为重量级锁),volatile ...

Sun Mar 19 04:02:00 CST 2017 15 49830
Java并发编程-volatile

  上一篇文章,学习了并发编程中的synchronized,这个比较好理解,也是我最初学习多线程编程中的一个简单的实现的,大学的时候就会了,然后就一直以为多线程环境的同步只能通过这个来实现的,事实上Java还提供了另外一个更加轻量级的实现-volatile,如果说synchronized实现了数据 ...

Mon Jul 09 01:29:00 CST 2018 0 4134
理解 JAVA 中的 volatile

理解 JAVA 中的 volatile 一、 volatile简述 volatileJava虚拟机提供的轻量级的同步机制(相对于synchronized)。主要作用是,1)保证共享变量的可见性;2)禁止指令重排序。 保证可见性 可见性就是指当一个线程修改了共享变量的值时 ...

Mon Apr 18 04:57:00 CST 2022 0 756
Java并发之volatile详解

带着问题阅读 1、为什么需要volatilevolatile能解决什么问题 2、volatile的实现原理是什么 3、什么是happen-before 4、volatile是否能保证线程安全 Java内存模型JMM 介绍volatile之前,首先对Java内存模型 ...

Fri Aug 20 06:22:00 CST 2021 0 243
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM