Java SE基础之Volatile变量初识
2017-04-19 10:54
169 查看
与Synchronized关键字区别:
作用
注意:
另一个volatile的案例就是单例模式:
http://blog.csdn.net/kevin_king1992/article/details/72801015
synchronized是JVM对程序的加锁机制,会使执行线程阻塞;volatile变量则不会,所以说是相对于synchronized而言更轻量的同 步机制。
作用
1.volatile修饰的变量可以保证更新操作对其它线程可见; 2.当被它修饰后,编译器与运行时都会注意到这个变量是共享的,所以不会将该变量上的操作和其他内存操作一起重排序。 禁止指令重排序是第二个语义
注意:
/** * 类描述:volatile保证变量更新可见性,但是不保证是原子性,所以使用的时候仍然需要注意线程安全。 * @author: Wanggd * 时间:2017年5月29日 */ public class VolatileTest { public static volatile int race = 0; public static void increase(){ //++计算并不是原子的。要想保证线程安全,依然需要借助synchronized或者lock。 race ++; } private static final int THREADS_COUNT = 20; public static void main(String[] args) { Thread[] threads = new Thread[THREADS_COUNT]; for(int i=0;i<threads.length;i++){ threads[i] = new Thread(new Runnable() { public void run() { for(int i=0;i<10000;i++){ increase(); } } }); threads[i].start(); } while(Thread.activeCount() > 1){ Thread.yield(); } System.out.println(race); //期望结果为200000 //实际结果往往小于200000; 193582 问题出在++操作。 } }
另一个volatile的案例就是单例模式:
http://blog.csdn.net/kevin_king1992/article/details/72801015
相关文章推荐
- Java 基础系列之volatile变量(一)
- 【Java基础】正确使用 Volatile 变量
- JAVA基础——初识JAVA(三)(变量、常量、数据类型)
- Java SE 基础:集合(2)
- Shell脚本应用(shell脚本基础与shell变量)
- bash基础之变量替换
- 6, excel vba 我的女神是谁__初识变量
- 【Java并发编程】之五:volatile变量修饰符—意料之外的问题(含代码)
- Java基础之修饰符在实例变量和static变量中的作用总结
- 《游戏脚本的设计与开发》-1.3 基础语法(注释,变量,函数,条件语句)
- 初识Python(简要基础)
- 一:PHP语言基础_PHP变量_声明变量和作用域
- java基础知识字节位、javadoc文件的生产、获取键盘输入、方法和变量静态情况
- 单例的双重校验加锁方法创建对象变量为什么要加volatile关键字
- 02_Swift2基础之常量和变量+注释+分号
- OC基础:实例变量和成员变量的区别
- volatile关键字的作用:防止变量被编译器优化
- volatile: 变量的理解
- C语言基础学习基本数据类型-int类型与int变量
- ATOM基础教程一初识ATOM(1)