volatile什么时候使用

作者: 大黑跟小白的日常 | 来源:发表于2019-02-11 21:15 被阅读422次

volatile关键字

我们都知道volatile修饰的变量,保证了数据内存的可见性。

强迫每个线程在读取volatile修饰的变量值时,需要从主内存中读取。保证数据一经改变,其它线程立即感知。

具体什么情况下使用呢?

比如我们设置一个开关,在一个线程完成某件事情时,其他所有线程将不再继续执行新任务。

具体代码如下

不加volatile修饰时是这样的

测试结果

如上可以看出,虽然开关已经在main线程中关闭,但是,多线程任务中判断并没有停止,持续进行着f(),并没有看到 thread over 提示。一直没有等到。

加上volatile修饰测试如下

如上可以看到,在外部开关关闭的时候,多线程任务也随机终止了。如此可见volatile的用处了。


注意

如果在多线程任务中,调用同步方法,或某些native方法(如Thread.sleep),会刷新线程内存数据,多线程任务也会根据开关的新值,断开任务。

如下

volatile只能保证数据更新后的其他线程的时时可见性,并不能保证操作的原子性。

需要搞清除的是,什么时候,线程内存数据跟主内存数据进行交换、更新。

相关文章

  • volatile什么时候使用

    volatile关键字 我们都知道volatile修饰的变量,保证了数据内存的可见性。 强迫每个线程在读取vola...

  • 什么时候使用volatile关键字?

    想必大家平时都见过volatile关键字,可是你知道什么时候需要使用volatile关键字吗? 直接看下面代码: ...

  • (3)线程的安全原理分析

    1.初识volatile 下面这段代码,演示了一个使用 volatile 以及没使用 volatile这个关键字,...

  • 2017-12-28

    synchronized和volatile volatile仅能使用在变量级别;synchronized则可以使用...

  • 深入解析volatile关键字

    1. 初步认识volatile 下面这段代码,演示了一个使用了volatile和没有使用volatile关键字对变...

  • java synchronized释放锁的时机

    当我们使用锁同步代码的时候,会在什么时候释放锁呢 在以下两种情况不会释放锁 tips volatile关键字的使用

  • volatile的作用

    Volatile的介绍: 使用volatile的原因: 用在多线程,目的同步变量 Volatile变量相对于锁更简...

  • 互联网JAVA面试常问问题(三)

    一、volatile原理和使用场景 volatile 原理 volatile变量进行写操作时,JVM会向处理器发送...

  • volatile使用

    volatile仅仅用来保证该变量对所有线程的可见性,但不保证原子性 volatile与synchronized的...

  • volatile 和原子类的异同,画个图理解一下

    volatile和原子类 原子类和 volatile 的使用场景 总结 volatile和原子类 我们首先看一个案...

网友评论

    本文标题:volatile什么时候使用

    本文链接:https://www.haomeiwen.com/subject/picceqtx.html