volatile的作用

1.防止指令重排序

首先要理解什么是指令重排序?指令重排序的利弊?后续举例说明

2.多线程访问共享资源时,缓解synchronized重量级锁带来的性能问题

但是volatile在特定的场景下使用,才能发挥其作用。如果对其原理理解不透彻,使用不当,会带来很多问题。

volatile使用注意几点:

1.能够保证并发线程访问共享变量(资源)的可见性,但不能保证其安全性

2.当并发线程访问(例如修改)的共享变量结果值不依赖当前值。

例如:多个线程访问共享变量count,执行count++,肯定不行,每个线程当前修改的count变量结果依赖于其之前的值。

又例如:两个并发线程A和B,A的作用是满足某一条件时终止线程B,当然终止B线程的时候,是通过共享变量flag的值进行,该变量类型为boolean。

A、B两个线程开始运行时,flag的默认值为false.当A线程发现满足终止条件时,立即将flag设置为true,此时线程B发现flag变量值为true,线程任务执行完毕。仔细思考这种场景下,

A线程设置flag的值时,不会受flag之前值的影响(不管flag之前是false还是true),只要A线程发现满足终止条件,立即将flag设置为true.这种场景就是两个线程通过flag进行通信,每个线程修改flag值又不依赖之前的值,可以大胆使用volatile修饰flag.

关于Java的volatile的更多相关文章

  1. 【转】java中volatile关键字的含义

    java中volatile关键字的含义   在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉. Java语言 ...

  2. Java中Volatile关键字详解

    一.基本概念 先补充一下概念:Java并发中的可见性与原子性 可见性: 可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉.通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值, ...

  3. 转:java中volatile关键字的含义

    转:java中volatile关键字的含义 在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉. Java语言 ...

  4. Java中Volatile的作用

    Java中Volatile的作用 看了几篇博客,发现没搞懂.可是简单来说,就是在我们的多线程开发中.我们用Volatile关键字来限定某个变量或者属性时,线程在每次使用变量的时候.都会读取变量改动后的 ...

  5. java中volatile不能保证线程安全

    今天打了打代码研究了一下java的volatile关键字到底能不能保证线程安全,经过实践,volatile是不能保证线程安全的,它只是保证了数据的可见性,不会再缓存,每个线程都是从主存中读到的数据,而 ...

  6. java中volatile

    volatile用来修饰变量.Java 语言中的 volatile 变量可以被看作是一种 "程度较轻的 synchronized":与 synchronized 块相比,volat ...

  7. Java并发-volatile的原理及用法

    Java并发-volatile的原理及用法 volatile属性:可见性.保证有序性.不保证原子性.一.volatile可见性 在Java的内存中所有的变量都存在主内存中,每个线程有单独CPU缓存内存 ...

  8. java中volatile关键字的理解

    一.基本概念 Java 内存模型中的可见性.原子性和有序性.可见性: 可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉.通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有 ...

  9. java 使用volatile实现线程数据的共享

    java 使用volatile实现线程数据的共享 直接上代码看效果: public class VolatileTest extends Thread { private volatile boole ...

  10. java 并发——volatile

    java 并发--volatile 介绍 维基百科: volatile 是一个类型修饰符(type specifier).volatile 的作用是确保本条指令不会因编译器的优化而省略,且要求每次直接 ...

随机推荐

  1. Java基础系列--09_集合2

    昨天介绍了集合的主要架构体系,今天主要的目的是学习集合的迭代器的遍历和List的特有功能. 迭代器:     概述:由于多种集合的数据结构不同,所以存储方式不同,取出方式也不同.但是他们都是有判断和获 ...

  2. 多种解法解决n皇后问题

    多种解法解决n皇后问题 0x1 目的 ​ 深入掌握栈应用的算法和设计 0x2 内容 ​ 编写一个程序exp3-8.cpp求解n皇后问题. 0x3 问题描述 即在n×n的方格棋盘上,放置n个皇后,要求每 ...

  3. nginx正则匹配

    1.通用匹配规则 .     匹配除换行符以外的任意字符 \w  匹配字母.数字.下划线.汉字 \s   匹配任意的空白符 \d   匹配数字 ^    匹配字符串的开始 $    匹配字符串的结束 ...

  4. Python学习案例之人脸检测识别

    前言 随着科技的发展,人脸识别技术在许多领域得到的非常广泛的应用,手机支付.银行身份验证.手机人脸解锁等等. 识别 废话少说,这里我们使用 opencv 中自带了 haar人脸特征分类器,利用训练好的 ...

  5. Tutorial 03_分布式数据库HBASE

    (一)编程实现一下内容,并用Hadoop提供的Shell命令完成相同任务: 编程实现: (1)列出HBase所有表的相关信息,例如表名; package tutorial01; import java ...

  6. Hyperscan-5.1.0 安装

    安装依赖ragel ragel源码下载地址 编译安装 $ tar -xvf ragel-6.10.tar.gz $ cd ragel-6.10 $ ./configure $ make $ sudo ...

  7. iTextCharp c#

    //引用iTextSharp static void testPdf() { var document = new Document(); var writer = PdfWriter.GetInst ...

  8. css块居中

    1.已知宽高的块级元素居中: 2.未知宽高的块级元素居中:

  9. 买房安全无忧 l 龙光集团与光大银行二手房资金监管战略合作!

    二手房买卖中,担心购房过程中房款交易的安全以致买方不敢先付款.卖方不敢先过户的现象比比皆是.近日,龙光集团与光大银行形成战略合作伙伴,联合推出“二手房交易资金监管”业务,彻底改变了二手房交易的付款模式 ...

  10. 华硕AC66U_B1救砖或者恢复固件

    手贱,刷了个DD-WRT,然后发现无法还原固件,刷不回原厂固件.网上找不到恢复的方法.还是DD-WRT官网给力,本身就提供了恢复原厂固件的方法,是英文的.但是其中提到的一个工具,现在没有了.ASUS ...