`
lionzm
  • 浏览: 12478 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

volatile 与synchronized的区别

    博客分类:
  • java
 
阅读更多
synchronized 具备有互斥性和可见性,volatile只具备有可见性
打个比方对一个 对一个变量a 进行a++操作
synchronized可以保证只有一个线程对a进行操作,计算完之后写回主内存,另一个线程需要从主内存read 出来在load到线程内存中。因此可以保证多线程下其计算的正确性
volatile只能保证一个线程在使用a之前去主内存中read出来,但线程之间没有互斥关系,同时会有多个线程进行++操作,导致写回主内存的值会变小
分享到:
评论

相关推荐

    volatile与synchronized的区别

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

    volatile和synchronized的区别

    ### volatile与synchronized的区别 #### 一、锁的特性:互斥与可见性 在并发编程中,锁作为实现线程安全的一种手段,其核心作用在于提供两种特性:互斥和可见性。 - **互斥**:互斥是指在任何时刻,只允许一个...

    java中volatile和synchronized的区别与联系

    Java 中 volatile 和 synchronized 的区别与联系 Java 中的 volatile 和 synchronized 是两种不同的关键字,它们都是用来解决多线程编程中出现的问题,但是它们的作用机制和使用场景却不同。 volatile volatile ...

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

    与volatile关键字不同,synchronized关键字是作用于一段代码或方法的,它的作用是确保在同一时刻只有一个线程可以执行该段代码。synchronized关键字可以通过锁定和解锁某个监视器来实现同步。 synchronized关键字的...

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

    volatile和synchronized的主要区别在于: 1. 可见性:两者都提供可见性,但volatile只保证变量本身的可见性,而synchronized则保证整个代码块的可见性。 2. 原子性:volatile不能保证复合操作(如`count++`)的原子...

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

    JMM规定了 volatile 变量、synchronized 关键字以及其他并发原语的行为。 【volatile关键字】在Java中,volatile是一个关键字,用于标记变量为共享变量,确保所有线程都能看到该变量的最新值。当一个变量被声明为...

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

    下面我们将详细介绍Synchronized和Volatile的区别和使用。 Synchronized Synchronized是一种同步机制,它可以保证多个线程在同一时刻只能有一个线程处于方法或者同步块中。Synchronized可以修饰方法、代码块和类,...

    并发编程一之synchronized和volatile.rar

    本资源"并发编程一之synchronized和volatile.rar"提供了多个示例代码(demo1到demo12),帮助我们深入理解这两个关键字的功能与用法。 1. **synchronized关键字**: - **互斥性**:synchronized可以确保同一时间...

    synchronized ReentrantLock volatile Atomic 原理分析.docx

    《Java并发编程:synchronized、ReentrantLock、volatile与Atomic深度解析》 在Java多线程编程中,正确地管理共享资源是至关重要的。本文将深入探讨四种关键的并发控制机制:synchronized关键字、ReentrantLock(可...

    Java线程:volatile关键字

    与 synchronized 块相比,volatile 变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是 synchronized 的一部分。 volatile 变量具有 synchronized 的可见性特性,但是不具备原子特性。这就是说...

    java同步synchronized关键字用法示例

    volatile与synchronized的区别** `synchronized`提供了数据一致性,但会阻止线程并发执行,造成阻塞。而`volatile`关键字则可以保证变量的可见性,但不会提供互斥访问。因此,`volatile`通常用于读多写少的情况,...

    volatile用法

    5. `volatile`与`synchronized`的区别: `volatile`和`synchronized`都是Java中的关键字,虽然它们都可以用于处理多线程同步问题,但作用机制不同。`volatile`确保了变量的修改对于其他线程是可见的,而`...

    synchronized关键字的实质及用法

    8. ** volatile与synchronized的区别** `volatile`关键字确保了变量的可见性,但不能保证原子性。`synchronized`则可以保证原子性和可见性,但会带来更高的开销。根据实际需求选择合适的方式。 9. **使用场景** ...

    java里的volatile关键字详解

    3. 有序性:Java语言提供了volatile 和synchronized 两个关键字来保证线程之间操作的有序性,volatile 是因为其本身包含“禁止指令重排序”的语义,synchronized是由“一个变量在同一个时刻只允许一条线程对其进行...

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

    volatile与synchronized的主要区别在于: 1. volatile只能修饰实例变量和类变量,而synchronized可以作用于方法和代码块,提供了更广泛的控制范围。 2. volatile仅保证数据的可见性和有序性,而不保证原子性,而...

    [JAVA][synchronized的使用]

    - **volatile**:相比`synchronized`,`volatile`关键字轻量级且快速,但只适用于变量的读写操作,无法保证复合操作的原子性。 - **ReentrantLock**:是Java并发包`java.util.concurrent.locks`中的可重入锁,提供...

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

    Java 多线程(Synchronized+Volatile+JUC 并发工具原理+线程状态+CAS+线程池) Java 多线程是 Java 语言中的一种并发编程机制,允许程序同时执行多个线程,以提高程序的执行效率和响应速度。 Java 多线程机制提供了...

    java synchronized demo

    6. **synchronized与 volatile 的区别**: - `volatile`主要保证变量的可见性和有序性,但无法保证原子性,而`synchronized`则能保证原子性、可见性和有序性。 - `volatile`适用于读多写少的情况,而`synchronized...

    volatile 变量的说明

    例如,如果你有一个计数器并尝试通过多个线程同时递增,volatile并不能保证递增操作的原子性,因此仍然需要使用synchronized或者其他并发控制机制来保证。 下面是一些关于volatile的常见问题及其解答: 1. **参数...

    java入门教程:数据类型_Java理论与实践如何正确使用Volatile变量.docx

    #### Volatile与Synchronized的比较 尽管`volatile`变量提供了一定程度的线程安全性和可见性,但它并不具备`synchronized`块所提供的原子性特性。这意味着对于涉及多个变量更新的操作(如计数器的增减),`volatile`...

Global site tag (gtag.js) - Google Analytics