关于Synchronized关键字的测试

  • 时间:2018-11-26 23:27 作者:方武泽 来源:方武泽 阅读:699
  • 扫一扫,手机访问
摘要:一、含义Synchronized作为java的关键字,可以在后面带上修饰的对象,加上代码块,也可以修饰方法。它的含义可以了解为:执行代码块的语句之前,必需取得修饰的对象的锁。具体可以分为以下几种情况:1.修饰对象是一个类对象,作用范围是整个代码块,锁作用于这个类的所有对象,所有的对象共用一个锁;2.

一、含义

Synchronized作为java的关键字,可以在后面带上修饰的对象,加上代码块,也可以修饰方法。

它的含义可以了解为:执行代码块的语句之前,必需取得修饰的对象的锁。

具体可以分为以下几种情况:

1.修饰对象是一个类对象,作用范围是整个代码块,锁作用于这个类的所有对象,所有的对象共用一个锁;

2.修饰对象是一个具体对象实例,作用范围是整个代码块,执行代码块必需先取得实例的锁;

3.修饰对象是一个方法,作用范围是整个方法,必需取得调用该方法的对象的锁才可以执行;

4.修饰是一个静态方法,作用返回是整个方法,锁作用于这个类的所有对象,所有的对象共用一个锁;

二、作用

多线程编程中,假如没有引入锁的机制,那数据就会存在脏读,数据会错乱。以一个自增的例子来说:

(1)假如没有使用同步锁,1000个线程并发执行对count的自增操作:

执行结果为:

普通递增结果:992耗时:68

得到的结果不是我们要的1000

(2)引入同步锁来修饰自增的方法:



得到的结果:

通过同步锁递增结果:1000耗时:1305

可以发现引入锁之后,我们得到了预期的结果,但同时由于锁竞争的关系,耗时也翻了很多倍。

(3)根据前面的详情,我们也可以将锁设置在对象中


得到的结果:

通过synchronized修饰对象递增结果:1000耗时:1297

三、拓展

从上面的测试情况中,发现synchronized关键字尽管可以处理并发读写的问题,但是同时也因而导致线程间锁竞争,锁等待的问题,因而性能也急剧下降;

但java也给我们提供了Atomic类,JDK1.5开始提供了java.util.concurrent.atomic包,方便我们无需使用锁即可以进行原子级的操作。


得到的结果:
使用Atomic结果:1000耗时:39

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】【Azure API Management】实目前API Management服务中使用MI(管理标识 Managed Identity)访问启用防火墙的Storage Account(2025-10-16 23:53)
【系统环境|】【Azure 存储服务】App Service 访问开启防火墙的存储账号时遇见 403 (This request is not authorized to perform this opera...(2025-10-16 23:52)
【系统环境|】YouTube账号购买全攻略|点击查看原文购买|购买YouTube账号、油管号自动发货服务的优势与缺点 附:YouTube无法加载?可能是这个设置在作怪!(2025-10-16 23:52)
【系统环境|】【Azure Developer】Azure Automation 自动化账号生成的时候怎么生成连接 与证书 (Connection & Certificate)(2025-10-16 23:41)
【系统环境|】【Azure Redis 缓存】如何使得Azure Redis可以仅从内网访问? Config 及 Timeout参数配置(2025-10-16 23:40)
【系统环境|】近日,四川宜宾,某地下停车场内的监控拍到了一幕惊险的画面。危险!一汽车修理师傅正在修理一辆3吨重的悍马时,悍马车突然自己启动,眼看就要撞向前面的一辆灰色轿车了,一侧的修理师傅做出了一个令人始料不...(2025-10-16 23:38)
【系统环境|】iOS 能耗监控与电池优化实战:如何查看App耗电量、分析CPU、GPU内存使用、(uni-app iOS开发性能调试指南)(2025-10-16 23:37)
【系统环境|】《风流女管家》法国犯罪悬疑片--《风流女管家》法语高清全集免费在线无广告完整观看---《风流女管家》HD正版免费播放-手机电脑皆可看(2025-10-16 23:36)
【系统环境|】2025含金量排名前十计算机专业证书(2025-10-15 20:51)
【系统环境|】你有白帽众测 我有黑帽雇佣(2025-10-15 20:50)
手机二维码手机访问领取大礼包
返回顶部