脚本宝典收集整理的这篇文章主要介绍了

java synchronized关键字小测验

脚本宝典小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望能帮助你少写一行代码,多一份安全和惬意。

前言

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

实验过程

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

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版

图片描述

有synchronized版

图片描述

实验结果分析

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

总结

以上是脚本宝典为你收集整理的

java synchronized关键字小测验

全部内容,希望文章能够帮你解决

java synchronized关键字小测验

所遇到的程序开发问题,欢迎加入QQ群277859234一起讨论学习。如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典网站推荐给程序员好友。 本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。

80%的人都看过