synchronized优化(synchronized和volatile的区别)

:暂无数据 2026-08-16 18:30:01 :0

synchronized优化(synchronized和volatile的区别)

大家好,如果您还对synchronized优化不太了解,没有关系,今天就由本站为大家分享synchronized优化的知识,包括synchronized和volatile的区别的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

本文目录

synchronized和volatile的区别

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

如何对网站进行性能优化

一、删除功能:重要数据伪删除,删除校验用户(避免A用户可以删除任何人数据)。文件上传预览删除功能不能做服务器文件删除,不要为了节省服务器资源给用户留下接口。如果要资源有限,那么在删除的时候也需要做用户校验(文件命名或文件路径关联用户ID等)
二、发短信:基本上没有人愿意自己和短信运营商直接对接短信业务,一般都是通过第三方短信服务商购买短信。在用户主动获取短信的时候前端做图片验证码校验,后端做发送量,发送间隔校验(图片验证码是可以被机识别的)。做短信日志记录,这些日志可以为前面的后台校验提供数据,系统运行期间的各种好处就不一一举例了。重要功能做语音验证码,比如注册送现金的活动,短信验证码可以被识别
三、页面数据获取:用户平凡的刷新数据会加大服务器压力,当然谁也挡不住用户刷新是吧,但是减少主动刷新次数也是一个减小服务器压力的方法,咱不能自己坑自己吧,(Table页切换做校验,有数据就不再拉取等等)
四、前端静态资源做CDN,可以提高用户访问速度,减少服务器压力
五、用户输入做SQL注入,javascript脚本注入
六、用到的Ajax请求:做ajax加拦截器,通过消息头过滤掉非ajax的地址栏访问,(谁然不一定能全部拦截,但是拦掉一部分小白还是可以得,总不能是个人就能攻击吧)
七、用户输入数据校验,输入文字长度,数字输入大小,int 、long等数据类型合理使用,(积分兑换的时候用户只有1积分,你让他输入兑换积分,你输入21000000000,int 接收的时候,超出了范围成了负数1永远大于负数),还有一点很重要,你的任何校验都不要依靠前端,毕竟前端是为用户的体验而生的,为了自己的安全还是多写点后台校验吧,
八、异常捕获:不要将异常信息抛给用户,首先不美观,其次这些错误信息中可能含有SQL错误,通过这些sql可以了解到你的数据库结构
九、前端数据获取的时候减少不必要字段输出,java面向对象,表数据面向对象,本来页面只需要两个数据,结果你返回了一个实体,前端可已查看到你数据库表结构,多看几个页面那么你的数据库设计就给了人家了呢
十、用户信息加密传输,一定不要把重要数据留在客户端,泄密重要信息的责任是要你承担的哦
十一、 现在越来越多人使用阿里云服务器,做客户项目的时候服务器是客户购买的,当然阿里云账户客户也有,你的配置文件不加密客户就能看见你的系统配置,结合上面的搞搞你的数据库,那你的产品还有什么秘密,至于代码,你觉得他值钱么
十二、 前端JS 脚本 和页面分离,压缩或加密,不要你的团队幸幸苦苦开发的唯美的页面和效果,被人家一个ctrl+s拿去回家研究了,何况你的js中还有大量的逻辑
十三、 线程安全:
1、synchronized同步 (有序性、可见性),
2、使用生产者消费者模式,(唤醒notify(),等待wait())
3、volatile同步(可见性,非有序性,只在无基础数据的赋值操作,直接操作主内存,减少主内存复制到工作内存的cpu消耗)
十四、 数据库读写分离的时候要注意个别业务读也要读在主库上(避免主从同步失败或延时)

synchronized和ReentrantLock性能比较

最近写了个例子,比较了一下synchronized和ReentrantLock的性能,分享一下数据和个人观点。

本例中有位移运算和写文件操作。本人PC处理器是4核,java version "1.8.0_231",例子中创建20个线程,每次测试循环500遍。

其实我也想测试更多的,但是一是慢,二是再多的数据会让Excel更卡。我做了N次测试,取了几次的数据,做成简易图表。

图中Y轴单位是纳秒,同时我删掉了部分数值特别大的,否则全挤到一块了。

synchronized有更好的稳定性和性能,更多点集中在底部,普遍低于500ns,数值高的点比Lock少很多。

ReentrantLock性能相对稳定且更好,但是synchronized的点有很多点集中在底部,而ReentrantLock分散的均匀。

取第一次位运算的底部放大
synchronized

ReentrantLock

众所周知,synchronized由于偏向锁等优化性能有明显提高,所以现在单纯的说synchronized性能一定差就不一定准确了。
经过这几天我的反复测试,个人觉得synchronized在轻量化的操作,比如简单运算,变量递增/减,赋值等情况有更好的性能。ReentrantLock更适用于复杂度相对高的操作,比如循环遍历,插入,IO等。

在低并发,特别同时是轻量化的操作,synchronized可能可以获得更好的性能。现实情况中虽然我们可能有几百个线程,但是大多数情况下,对于共享资源的修改,同时只有几个或者十几个,那么使用synchronized也不失为一种好选择。

例子中文件操作受IO干扰比较大,不合理,改成遍历长度100的数组并赋值会怎么样?(经简单测试,lock更快)

在线程重入的情况下两者性能如何呢?(位运算,遍历数组并赋值synchronized更快,高近3个数量级)

组合synchronized和volatile对变量的增减操作和直接使用Atomicxxxx哪个更快(本人PC上是前者快,特别是并发很小的时候)

这里不得再次提一下以上结果都是基于本人PC的测试数据。因为还有10核一台云主机,测试中发现对于本例中文件操作结果是不确定的,对于synchronized+volatile的例子是低并发比如5个线程,那是前者快,否则是后这快。

测试中的数据还可以继续挖掘,比如在某一区间内的分布等。

关于synchronized优化到此分享完毕,希望能帮助到您。

synchronized优化(synchronized和volatile的区别)

本文编辑:admin

更多文章:


withdrawal(withdrawal是什么意思)

withdrawal(withdrawal是什么意思)

今天给各位分享withdrawal是什么意思的知识,其中也会对withdrawal是什么意思进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年10月11日 07:00

根据流程图怎么编写程序(用c语言根据流程图写程序)

根据流程图怎么编写程序(用c语言根据流程图写程序)

大家好,今天小编来为大家解答以下的问题,关于根据流程图怎么编写程序,用c语言根据流程图写程序这个很多人还不知道,现在让我们一起来看看吧!

2026年10月11日 06:00

在from子句中可以出现(如何在from 子句中嵌套查询下面的语句在access中出错!)

在from子句中可以出现(如何在from 子句中嵌套查询下面的语句在access中出错!)

大家好,关于在from子句中可以出现很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于如何在from 子句中嵌套查询下面的语句在access中出错!的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望

2026年10月11日 05:20

countif函数统计个数怎么用(countif函数怎么用 详解Excel中countif函数的使用方法)

countif函数统计个数怎么用(countif函数怎么用 详解Excel中countif函数的使用方法)

其实countif函数统计个数怎么用的问题并不复杂,但是又很多的朋友都不太了解countif函数怎么用 详解Excel中countif函数的使用方法,因此呢,今天小编就来为大家分享countif函数统计个数怎么用的一些知识,希望可以帮助到大

2026年10月11日 03:30

正则匹配数字之前的字符(正则表达式如何匹配前面是数字、中间是“/”、后面也是数字,就像2/3专业的模式)

正则匹配数字之前的字符(正则表达式如何匹配前面是数字、中间是“/”、后面也是数字,就像2/3专业的模式)

本篇文章给大家谈谈正则匹配数字之前的字符,以及正则表达式如何匹配前面是数字、中间是“/”、后面也是数字,就像2/3专业的模式对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问

2026年10月11日 03:00

register语言学(register语言学)

register语言学(register语言学)

“register语言学”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看register语言学(register语言学)!

2026年10月11日 01:40

系统架构设计师可以直接考吗(学生可以报名系统架构设计师吗)

系统架构设计师可以直接考吗(学生可以报名系统架构设计师吗)

“系统架构设计师可以直接考吗”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看系统架构设计师可以直接考吗(学生可以报名系统架构设计师吗)!

2026年10月11日 01:00

orlnsertbootmediinselected(我电脑开机显示这个是什么意思or insert boot media in select)

orlnsertbootmediinselected(我电脑开机显示这个是什么意思or insert boot media in select)

大家好,如果您还对orlnsertbootmediinselected不太了解,没有关系,今天就由本站为大家分享orlnsertbootmediinselected的知识,包括我电脑开机显示这个是什么意思or insert boot med

2026年10月10日 23:00

display的用法(display是什么意思 详解display的含义和用法)

display的用法(display是什么意思 详解display的含义和用法)

大家好,如果您还对display的用法不太了解,没有关系,今天就由本站为大家分享display的用法的知识,包括display是什么意思 详解display的含义和用法的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年10月10日 22:00

html全部居中代码(怎么让网页居中显示,html如何让网页居中)

html全部居中代码(怎么让网页居中显示,html如何让网页居中)

大家好,今天小编来为大家解答以下的问题,关于html全部居中代码,怎么让网页居中显示,html如何让网页居中这个很多人还不知道,现在让我们一起来看看吧!

2026年10月10日 21:10

最近更新

戴尔vostro3500评测(戴尔:Vostro15 3500与Ins15 3511区别)
2026-10-11 09:10:02 浏览:0
西数5000aakx(西数WD-5000AAKX-001CAO和西数800AAJS-00WAAO哪个做安装系统盘比较好)
2026-10-11 08:30:05 浏览:0
热门文章

标签列表