synchronized和volatile的区别

volatile

  • volatile是Java提供的最轻量级的同步机制,Java语言包含了两种内在的同步机制:同步块和volatile变量,相比synchronized(重量级锁),volatile更轻量级,因为它不会引起上下文的切换和调度,但是volatile变量同步性差,使用时容易出错
  • volatile 保证了共享变量的可见性,被 volatile 关键字修饰的变量,如果值发生了变化,其他线程立刻可见,避免出现脏读现象。
  • volatile 禁止了指令重排,可以保证程序执行的有序性,但是由于禁止了指令重 排,所以 JVM 相关的优化没了,效率会偏弱

synchronized和volatile的区别

  1. volatile 本质是告诉 JVM 当前变量在寄存器中的值是不确定的,需要从主存中读取,synchronized 则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。
  2. volatile 仅能用在变量级别,而 synchronized 可以使用在变量、方法、类级别
  3. volatile 仅能实现变量的修改可见性,不能保证原子性;而 synchronized 则可以保 证变量的修改可见性和原子性
  4. volatile 不会造成线程阻塞,synchronized 可能会造成线程阻塞。
  5. volatile 标记的变量不会被编译器优化,synchronized 标记的变量可以被编译器优化。

相关推荐

  1. synchronizedvolatile区别

    2023-12-11 11:18:03       32 阅读
  2. Synchronizedvolatile区别

    2023-12-11 11:18:03       33 阅读
  3. Synchronized ReentrantLock 区别

    2023-12-11 11:18:03       39 阅读
  4. synchronized ReentrantLock 区别是什么

    2023-12-11 11:18:03       19 阅读
  5. synchronized Lock 区别是什么

    2023-12-11 11:18:03       20 阅读
  6. synchronizedvolatile、CAS 三者之间有什么区别

    2023-12-11 11:18:03       14 阅读
  7. SynchronizedReentranLock区别

    2023-12-11 11:18:03       8 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-11 11:18:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-11 11:18:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-11 11:18:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-11 11:18:03       18 阅读

热门阅读

  1. 基于AidLux的工业视觉少样本缺陷检测实战

    2023-12-11 11:18:03       42 阅读
  2. iOS 防截屏方法(一)

    2023-12-11 11:18:03       41 阅读
  3. React学习笔记

    2023-12-11 11:18:03       36 阅读
  4. 线程组、线程切换、线程异常

    2023-12-11 11:18:03       44 阅读
  5. scheduleatfixedrate详解

    2023-12-11 11:18:03       39 阅读
  6. Presto集群安装部署

    2023-12-11 11:18:03       44 阅读
  7. springboot自定义cron定时任务执行

    2023-12-11 11:18:03       37 阅读
  8. 第三十一章 控制到 XML 模式的映射 - %ListOfDataTypes

    2023-12-11 11:18:03       23 阅读