美文网首页
volatile与synchronized详解

volatile与synchronized详解

作者: 和帅_db6a | 来源:发表于2018-11-09 20:49 被阅读0次

volatile具有两个特性,一个是保证此变量对所有线程的可见性,另一个是禁止指令重排序。volatile变量的运算在并发情况下也是不安全的。如下

避免在以上场景使用

最后输出结果都不一样,都是一个小于200000的数字。原因在于java里面的运算并非原子操作。所以在以下两种情况下我们仍然需要加群(synchronized或concurrent中的原子类)来保证原子性1.运算结果并不依赖变量的当前值,或者能够确保只有一个单一线程修改变量的值2.变量不需要与其他的状态变量共同参与不变约束。

正确使用方式

synchronized是保证一个变量在同一时刻只允许一条线程对其进行lock操作来保证同步的。它提供了更高层次的字节码指令monitorenter和monitorexit来隐式地加锁,因此代码块之间的操作也具备原子性。

相关文章

  • volatile、synchronized、lock详解

    volatile、synchronized、lock详解 1、volatile 被volatile定义的变量被一个...

  • volatile与synchronized详解

    volatile具有两个特性,一个是保证此变量对所有线程的可见性,另一个是禁止指令重排序。volatile变量的运...

  • Java中的锁

    锁产生的背景 volatile和synchronized Lock接口 ReenTrantLock使用详解 同步实...

  • Java并发知识体系详解

    Java 并发相关知识体系详解,包含理论基础,线程基础,synchronized,volatile,final关键...

  • 线程同步volatile与synchronized详解

    在之前的文章java面试 synchronized关键字中,已经详细的介绍了synchronized关键字的用法和...

  • Java线程 - Lock

    Lock 与 Syncronized 和 Volatiled 的区别? synchronized与volatile...

  • Volatile的使用

    volatile变量在Java中被看做是"程度较轻的synchronized",与synchronized相比,v...

  • volatile

    一、volatile 的作用是什么?与 synchronized 有什么异同? volatile 是什么它是 Ja...

  • 2017-12-28

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

  • 锁比较 关键字比较

    volatile与synchronized区别:volatile不会进行加锁操作。因此也不会使执行线程阻塞,因此v...

网友评论

      本文标题:volatile与synchronized详解

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