全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

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小时内与您取得联系。