Java SE 基础之Volatile变量初识
来源:互联网 发布:mysql if exists用法 编辑:程序博客网 时间:2024/05/20 06:50
与Synchronized关键字区别:
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
0 0
- Java SE 基础之Volatile变量初识
- Java多线程之volatile变量
- java并发之volatile变量
- 初识 Java SE
- 跟着实例学习java多线程5-初识volatile变量
- 【Java基础】正确使用 Volatile 变量
- java基础之volatile关键字
- Java基础之volatile关键字
- 【Java基础】多线程之volatile
- JAVA 基础之初识JAVA
- Java基础之初识Java
- Java SE 基础之接口回顾
- java 关键字 volatile初识
- Java SE -- 静态变量
- Java SE-变量
- java SE 变量
- java多线程学习之volatile变量
- Java并发编程之volatile变量
- iBET Lucky Draw Jason Zhang & Power Station Concert Ticket(Concert Ticket Lucky Draw, iBET, iBET Con
- ucos 任务的基本概念
- JFFs2文件系统的重新定制
- Visual Studio最常用、最高效的快捷键
- 命令find的35个实例
- Java SE 基础之Volatile变量初识
- C++ 重载 覆盖 隐藏
- seetaface 人脸检测库
- 百度统计了解
- Android一点 打造全功能适配AutoView
- 安卓配置问题
- 学习Json小体会
- SELinux&SEAndroid简介
- docker命令自动补全