设为首页 加入收藏

TOP

quarkus依赖注入之九:bean读写锁(三)
2023-08-26 21:11:24 】 浏览:83
Tags:quarkus 赖注入 bean
方法上任何锁,就使用Lock.Type.NONE

image-20220417113205821
  • 这里预测一下修改后的效果
  1. 在deposit和deduct都没有被调用时,get方法可以被调用,而且可以多线程同时调用,因为每个线程都能顺利拿到读锁
  2. 一旦deposit或者deduct被调用,其他线程在调用deposit、deduct、get方法时都被阻塞了,因为此刻不论读锁还是写锁都拿不到,必须等deposit执行完毕,它们才重新去抢锁
  3. 有了上述逻辑,再也不会出现deposit和deduct同时修改余额的情况了,预测单元测试应该能通过
  4. 这种读写锁的方法虽然可以确保逻辑正确,但是代价不小(一个线程执行,其他线程等待),所以在并发性能要求较高的场景下要慎用,可以考虑乐观锁、AtomicInteger这些方式来降低等待代价
  • 再次运行单元测试,如下图,测试通过
image-20220417120035378
  • 再来看看测试过程中的日志,如下图,之前的几个方法同时执行的情况已经消失了,每个方法在执行的时候,其他线程都在等待

image-20220417120428928

  • 至此,bean锁知识点学习完毕,希望本篇能给您一些参考,为您的并发编程中添加新的方案

源码下载

名称 链接 备注
项目主页 https://github.com/zq2599/blog_demos 该项目在GitHub上的主页
git仓库地址(https) https://github.com/zq2599/blog_demos.git 该项目源码的仓库地址,https协议
git仓库地址(ssh) git@github.com:zq2599/blog_demos.git 该项目源码的仓库地址,ssh协议
  • 这个git项目中有多个文件夹,本次实战的源码在quarkus-tutorials文件夹下,如下图红框
    image-20220312091203116
  • quarkus-tutorials是个父工程,里面有多个module,本篇实战的module是basic-di,如下图红框
    image-20220312091404031

欢迎关注博客园:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇从零玩转系列之微信支付实战PC端.. 下一篇quarkus依赖注入之八:装饰器(De..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目