volatile是变量修饰符,而synchronized则是作用于一段代码或方法;如下三句get代码:
int i1;
int geti1() {return i1;}
volatile int i2;
int geti2() {return i2;}
int i3;
synchronized int geti3() {return i3;}
geti1() 得到存储在当前线程中i1的数值。多个线程有多个i1变量拷贝,而且这些i1之间可以相互不同。换句话说,另一个线程可能已经改变了它线程内的i1值,而这个值可以和当前线程中的i1值不相同。 在Java内存模型中,有main memory(主内存区域),这里存放了变量目前的“准确值”,每个线程也有自己的memory(例如寄存器)。为了性能,一个线程会在自己的memory中保存要访问的变量的副本。这样就会出现同一个变量在某个瞬间,在一个线程的memory中的值可能与另外一个线程memory的值,或者main memory的值不一致的情况。因此实际上存在一种可能:main memory的值i1值是1,线程1里的i1是2,线程2里的i1值是3,这在线程1和线程2都改变了他们各自的i1值,而且这个改变还没来得及传给main memory 或其他线程时就会发生。
geti2() 得到的是main memory的i2数值。一个变量声明为volatile,就意味着这个变量是随时会被其他线程修改的,因此不能将它cache在线程memory中。换句话说,一个变量经过volatile修饰后在所有线程中必须是同步的,任何线程中改变了它的值,所有其他线程立即获得了相同的值。所以,volatile修饰的变量存取时比一般变量消耗的资源要多一点,因为线程有它自己的变量拷贝更为高效。
geti3()方法被synchronized修饰,用synchronized来修饰一个方法或者一个贷款的时候,能够保证在同一时刻最多只有一个线程执行该段代码。既然volatile关键字已经实现了线程间数据同步,又要synchronized干嘛呢?当两个并发线程访问同一个对象object中的这个synchronized(this)同步贷款时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块才能执行该代码块。然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时候,其他线程对object中所有其他synchronized(this)同步代码块的访问将被阻塞。当一个线程访问object的一个synchronized(this)同步代码块时,它就获得了这个object的对象锁,结果,其他线程对该对象所有同步代码部分的访问都被暂时阻塞。
总结一下区别:
一,volatile是变量修饰符,而synchronized则作用于一段代码或者方法。
二,volatile只是在线程内存和main memory(主内存)间同步某个变量的值;而synchronized通过锁定和解锁某个监视器同步所有变量的值。显然synchronized要比volatile消耗更多资源。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Java
# volatile
# synchronized
# 深入理解java中的synchronized关键字
# 详解Java中synchronized关键字的死锁和内存占用问题
# Java中synchronized关键字修饰方法同步的用法详解
# java多线程编程之使用Synchronized关键字同步类方法
# JAVA面试题 简谈你对synchronized关键字的理解
# Java中使用synchronized关键字实现简单同步操作示例
# 举例讲解Java中synchronized关键字的用法
# 实例解析Java中的synchronized关键字与线程安全问题
# Java关键字synchronized基本使用详解
# 自己的
# 的是
# 多个
# 改变了
# 作用于
# 获得了
# 就会
# 也有
# 还没
# 最多
# 修饰符
# 则是
# 会在
# 时间内
# 又要
# 将被
# 或其他
# 只有一个
# 要比
# 要多
相关文章:
网站图片在线制作软件,怎么在图片上做链接?
微信小程序 input输入框控件详解及实例(多种示例)
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
建站之星展会模版如何一键下载生成?
如何获取上海专业网站定制建站电话?
深圳企业网站制作设计,在深圳如何网上全流程注册公司?
网站网页制作专业公司,怎样制作自己的网页?
南平网站制作公司,2025年南平市事业单位报名时间?
建站与域名管理如何高效结合?
如何高效利用亚马逊云主机搭建企业网站?
如何确保西部建站助手FTP传输的安全性?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
如何设置并定期更换建站之星安全管理员密码?
建站之星×万网:智能建站系统+自助建站平台一键生成
宝塔建站教程:一键部署配置流程与SEO优化实战指南
音乐网站服务器如何优化API响应速度?
Java解压缩zip - 解压缩多个文件或文件夹实例
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
宝塔建站助手安装配置与建站模板使用全流程解析
如何零成本快速生成个人自助网站?
如何快速上传自定义模板至建站之星?
网站建设设计制作营销公司南阳,如何策划设计和建设网站?
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
建站之星如何保障用户数据免受黑客入侵?
如何用y主机助手快速搭建网站?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
如何快速生成可下载的建站源码工具?
免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
c# 在ASP.NET Core中管理和取消后台任务
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
seo网站制作优化,网站SEO优化步骤有哪些?
建站OpenVZ教程与优化策略:配置指南与性能提升
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
如何在阿里云香港服务器快速搭建网站?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
*服务器网站为何频现安全漏洞?
高防服务器如何保障网站安全无虞?
教育培训网站制作流程,请问edu教育网站的域名怎么申请?
山东云建站价格为何差异显著?
IOS倒计时设置UIButton标题title的抖动问题
智能起名网站制作软件有哪些,制作logo的软件?
如何在Golang中使用encoding/gob序列化对象_存储和传输数据
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
山东网站制作公司有哪些,山东大源集团官网?
建站主机助手选型指南:2025年热门推荐与高效部署技巧
*请认真填写需求信息,我们会在24小时内与您取得联系。