java synchronized关键字小测验

发布时间:2019-11-18 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了java synchronized关键字小测验脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

前言

前些天公司线上发生事故,在排查原因过程中发现代码中出现了synchronized关键字。在学习java的时候我们都知道synchronized关键字的语法含义。多个线程对于同一个对象上的synchronized方法是串行访问的。它是一把双刃剑,在止并发访问公共数据的同时也对性能产生了影响。究竟synchronized关键字回性能有多大影响,今天我们来做一个小实验。

实验过程

1 写两段简单的代码(SPRingMVC)

@H_777_9@无synchronized版
@RequestMapping("testSyn") @ResponseBody public String testSyn() {     try {         Thread.sleep(10);     } catch (InterruptedException e) {         e.printStackTrace();     }     return "ok"; } 
有synchronized版
@RequestMapping("testSyn") @ResponseBody public synchronized String testSyn() {     try {         Thread.sleep(10);     } catch (InterruptedException e) {         e.printStackTrace();     }     return "ok"; }
用sleep模拟一个需要一小段时间的操作

2 在本机启动web应用

3 对http://127.0.0.1:8080/testSyn接口进行压测

vUser设为99

实验结果

无synchronized版

java synchronized关键字小测验

有synchronized版

java synchronized关键字小测验

实验结果分析

从上面的结果可以发现无synchronized的tps约为有synchronized的5倍,且有synchronized关键字的版本平均响应时间已经超过1秒,严重影响了用户体验。因此在单机同时处理99个vUser的场景时,synchronized关键字会对响应时间有明显的影响。如果当前的服务是为上层其他应用服务的时候则有可能产生大量超时,进而引发雪崩效应。因此在生产环境建议谨慎使用synchronized关键字。

脚本宝典总结

以上是脚本宝典为你收集整理的java synchronized关键字小测验全部内容,希望文章能够帮你解决java synchronized关键字小测验所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。