`
songbin0201
  • 浏览: 319903 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

volatile 和 synchronized

阅读更多
区分volatile和 synchrozied的使用场景,首先需要了解多线程环境下,线程的工作方式

(转载)

在多线程环境下,每个线程都保留一个线程上下文,存储了主存中共享变量的副本,因此会带来两个问题:1、可见性  2、原子性

可见性:
多线程环境下,如果后一个线程访问到的变量值是前一个线程修改后的变量值,说明这个变量是可见的,否则就是非可见的。

原子性:
变量的访问是原子的,即同一时刻只能有一个线程对其访问。

解决多线程环境下的可见性和原子性,就要用到volatile和 synchrozied;

一、volatile
所谓volatile,就是告诉处理器,每次变量的访问都直接在主存中操作;
多线程编程时,使用volatile的好处是:更高的吞吐量、更少的代码;
使用volatile可以解决多线程下变量的可见性问题,但是volatile很容易被误用,用来进行原子性操作。
较为常见的case为多线程下计数器的实现
   public volatile int i;
   i++;

因为i++是一个复合操作,即i=i+1;(先读主内存,后修改,然后刷新主内存)
所以多线程下,有可能在在刷新主内存前已经有另外一个线程读取了旧值。

二、synchronized
线程同步关键字,通过对变量或者语句块使用,可以保证操作的原子性。
  • 大小: 57.8 KB
分享到:
评论

相关推荐

    volatile和synchronized的区别

    讲解了锁的两种特性,互斥和可见;volatile和synchronize的用法和区别

    volatile与synchronized的区别

    volatile与synchronized的区别,锁提供了两种主要特性:互斥(mutual exclusion) 和可见性(visibility)

    java中volatile和synchronized的区别与联系

    主要介绍了java中volatile和synchronized的区别与联系的相关资料,希望通过本文能帮助到大家,让大家理解这部分内容,需要的朋友可以参考下

    Java关键字volatile和synchronized作用和区别

    主要为大家详细介绍了Java关键字volatile和synchronized的作用和区别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    java多线程中的volatile和synchronized用法分析

    主要介绍了java多线程中的volatile和synchronized用法分析,以实例的形式分析了在多线程中volatile和synchronized的用法区别与使用原理,具有一定的参考借鉴价值,需要的朋友可以参考下

    面试官最爱的volatile关键字.docx

    volatile可以看成是synchronized的一种轻量级的实现,但volatile并不能完全代替synchronized,volatile有synchronized可见性的特性,但没有synchronized原子性的特性。 可见性即用volatile关键字修饰的成员变量表明...

    JavaMultiThread

    volatile和synchronized的区别:1).volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取;synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。...

    并发编程一之synchronized和volatile.rar

    关联自己的博客《并发编程(一)》中的附件,主要提供一些demo供大家演示和使用,主要涉及一些并发的一些的基本使用,包括synchronized关键字、volatile关键字。

    并发编程之JMM&synchronized&volatile详解.pdf

    并发编程关键字

    synchronized ReentrantLock volatile Atomic 原理分析.docx

    synchronized关键字编译后会在同步块前后形成monitorenter和monitorexit两个字节码指令 执行monitorenter指令时需要先获得对象的锁(每个对象有一个监视器锁monitor),如果这个对象没被锁或者当前线程已经获得...

    一篇文章弄懂Java多线程基础和Java内存模型

    通过Callable和Future接口创建线程三、Java内存模型概念四、内存间的交互操作五、volatile和synchronized的区别 写在前面:提起多线程大部门同学可能都会皱起眉头不知道多线程到底是什么、什么时候可以用到、用的...

    Java线程之线程同步synchronized和volatile详解

    主要介绍了Java线程之线程同步synchronized和volatile详解,具有一定参考价值,需要的朋友可以了解下。

    Synchronized 和 Lock 的区别和使用场景

    并发编程中,锁是经常需要用到的,今天我们一起来看下Java中的锁机制:synchronized和lock。 Synchronized 和 Lock的概念 Synchronized 是Java 并发编程中很重要的关键字,另外一个很重要的是 volatile。Syncronized...

    Java多线程(Synchronized+Volatile+JUC 并发工具原理+线程状态+CAS+线程池)

    Java多线程(Synchronized+Volatile+JUC 并发工具原理+线程状态+CAS+线程池)

    Java中volatile关键字的含义

     Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 同步块 和 volatile 关键字机制。  synchronized  同步块大家都比较熟悉,通过 synchronized 关键字来实现,所有加上synchronized 和 块...

    Java——volatile关键字详解

    volatile是比synchronized关键字更轻量级的同步机制,访问volatile变量时不会执行加锁操作,因此不会使执行线程阻塞。 volatile保证可见性和禁止指令重排序,底层是通过“内存屏障”来实现,但不保证原子性。 写入...

    C++大厂面试真题宝典 精选100道完结7章

    1、synchronized 关键字和 volatile 关键字的区别 synchronized 关键字和 volatile 关键字是两个互补的存在,而不是对立的存在! volatile 关键字是线程同步的轻量级实现,所以volatile 性能肯定比synchronized...

    详解java并发编程(2) --Synchronized与Volatile区别

    主要介绍了Synchronized与Volatile区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Java并发volatile关键字.docx

    synchronized是阻塞式同步,在线程竞争激烈的情况下会升级为重量级锁,而volatile就可以说是JVM提供的最轻量级的同步机制。JMM告诉我们,各个线程会将共享变量从主内存中拷贝到工作内存,然后执行引擎会基于工作内存...

Global site tag (gtag.js) - Google Analytics