随笔分类 -  java并发编程实战

java的原子类到底是啥?ABA,CAS又是些什么?
摘要:1)解决并发不是用锁就能解决吗,那SDK干嘛还要搞个原子类出来? 锁虽然能解决,但是加锁解锁始终还是对性能是有影响的,并且使用不当可能会造成死锁之类的问题。 2)原子类是怎样使用的,比如说我要实现一个线程安全的累加器? public class Test { AtomicLong count = n 阅读全文

posted @ 2022-04-02 15:17 Love&Share 阅读(331) 评论(0) 推荐(0) 编辑

并发容器的前世今生是怎样的?
摘要:1)我们java中的容器大致可以分为哪几类? list set map queue 2)线程安全容器的进化史是怎样的? 1.5之前,我们的线程安全容器都是用synchronized修饰的,这样的话串行度很高,程序的性能就比较拉跨。这时的容器 只能叫做同步容器 1.5之后,我们用了写时复制技术,保障线 阅读全文

posted @ 2022-03-31 12:17 Love&Share 阅读(37) 评论(0) 推荐(0) 编辑

CountDownLatch和CyclicBarrier:如何让多线程步调一致?
摘要:案例:对账系统的业务是这样的,用户通过在线商城下单,会生成电子订单,保存在订单库;之后物流会生成派送单给用户发货,派送单保存在派送单库。为了防止漏派送或者重复派送,对账系统每天还会校验是否存在异常订单。对账系统的处理逻辑很简单,系统流程图如下。目前对账系统的处理逻辑是首先查询订单,然后查询派送单,之 阅读全文

posted @ 2022-03-30 22:26 Love&Share 阅读(667) 评论(0) 推荐(2) 编辑

读多写少的场景下,竟然还有比读写锁更牛X的锁?
摘要:1)上一篇文章我们聊了读写锁,他的适用场景是读多写少的场景下,那有没有其它性能比读写锁还要牛逼的锁呢? StampedLock ,java1.8诞生的。 2)StampedLock比读写锁牛在什么地方? 读写锁分为两种:读锁和写锁 StampedLock有三种模式:写锁和悲观读锁,这两个对应我们的读 阅读全文

posted @ 2022-03-29 20:55 Love&Share 阅读(184) 评论(0) 推荐(1) 编辑

怎样用读写锁快速实现一个缓存?
摘要:1)SDK已经有管程了,不是可以解决所有的并发问题的吗,为什么还要有读写锁? 不同的场景下使用不同的锁效果是不一样的,我们的读写锁用在读多写少的场景下那是非常有用的。 2)读写锁是我们JAVA特有的吗?他有什么原则? 读写锁并不是java特有的,是通用的一个技术方案。读写锁的话有三个基本原则: 同一 阅读全文

posted @ 2022-03-28 18:03 Love&Share 阅读(576) 评论(0) 推荐(0) 编辑

如何用信号量去实现一个限流器?
摘要:1)什么是信号量呢? 65年斯特拉提出来信号量,一直用到80年左右都是用它来解决并发的问题,直到管程模型出来了,他就逐渐落魄了。信号量你可以类比生活中的红绿灯,绿灯行红灯停。 2)信号量模型是怎样的? 一个计数器,一个等待队列,3个方法(init(),up(),dowm()) 3)信号量的工作原理是 阅读全文

posted @ 2022-03-27 14:54 Love&Share 阅读(377) 评论(0) 推荐(0) 编辑

Lock和Condition(下):Dubbo如何用管程实现异步转同步?
摘要:1)Lock 和 Condition 实现的管程在方法的调用上和sychronized有什么不同? 前者用await(), signal(),signalAll()。后者使用wait,notify(),notifiAll(); 2)本节我们要探究dubbo异步转同步,那什么是异步什么是同步呢? 你去 阅读全文

posted @ 2022-03-24 11:52 Love&Share 阅读(362) 评论(0) 推荐(0) 编辑

Lock和Condition(上):隐藏在并发包中的管程
摘要:1)管程在SDK包中是怎样实现的? 靠Lock和Condition接口,Lock用来解决互斥的问题 ,Condition用来解决同步的问题。 2)java语言层面已经有sychronized来 实现管程了,那为什么我们的sdk工具包中还要再实现一遍管程,直接用sychronized不就行了吗? sy 阅读全文

posted @ 2022-03-23 12:12 Love&Share 阅读(37) 评论(0) 推荐(0) 编辑

如何用面向对象的思想来写好并发程序?
摘要:1)我们设计并发程序需要明确那三点呢? 把我们共享变量封装起来,提供一定接口给外界访问。 明确我们共享变量之间的约束条件 指定访问共享变量的策略 2)该如何去封装我们的共享变量呢? 比方说我要封装一个计数器的共享变量count,那就是属性私有,get,addOne方法,并且方法用synchroniz 阅读全文

posted @ 2022-03-22 14:38 Love&Share 阅读(36) 评论(0) 推荐(0) 编辑

一不小心就死锁了,怎么办?
摘要:1)上一节我们用一把大锁锁住银行的转账业务,这样会造成什么样的问题? 所有账户的转账操作都是串行的,性能太差 A 转账户 B、账户 C 转账户 D 这两个转账操作现实世界里是可以并行的,但是在这个方案里却被串行化了 2)那么如何优化可以让我们的账户之间转账和入账能够并行执行呢? 在 transfer 阅读全文

posted @ 2022-03-10 23:04 Love&Share 阅读(299) 评论(0) 推荐(0) 编辑

互斥锁(下):如何用一把锁保护多个资源?
摘要:1)当我们要保护多个资源时,首先要做的是什么? 分析这些资源是否存在关联关系 2)应该怎样保护没有关联关系的多个资源? 应该怎样保护没有关联关系的多个资源?**就是没有关联关系的,这种场景非常容易解决,那就是球赛有球赛的门票,电影院有电影院的门票,各自管理各自的 对应到编程领域,例如,银行业务中有针 阅读全文

posted @ 2022-03-04 23:18 Love&Share 阅读(444) 评论(0) 推荐(3) 编辑

互斥锁(上):解决原子性问题
摘要:1)回顾一下什么是原子性? 一个或多个操作在CPU执行的过程中不被中断的特性,称为原子性。 2)原子性问题的源头是什么? 线程切换 3)原子性问题到底该如何解决呢? 既然原子性问题的产生源头是线程切换,而线程切换依赖CPU中断的,所以禁止CPU发生中断就能禁止线程切换 4)为什么说单核的时候好解决原 阅读全文

posted @ 2022-03-03 22:04 Love&Share 阅读(162) 评论(0) 推荐(0) 编辑

Java内存模型:看Java如何解决可见性和有序性问题
摘要:1)导致可见性的原因是缓存,导致有序性的原因是编译优化,那我们最直接的解决可见性和有序性的方案是什么? 禁用缓存和编译优化 2)1是暴力解法,虽然问题解决了,但是性能拉跨了,那合理的解决方案是什么? 按需禁用缓存以及编译优化 3)如何做到“按需禁用”呢? 所谓“按需禁用”其实就是指按照程序员的要求来 阅读全文

posted @ 2022-03-03 22:01 Love&Share 阅读(126) 评论(0) 推荐(0) 编辑

可见性、原子性和有序性问题:并发编程Bug的源头
摘要:1)如何快速而又精准地解决“并发”类的疑难杂症? 理解这件事情的本质,追本溯源,深入分析这些 Bug 的源头在哪里。 2)CPU、内存、I/O 设备的速度差异有多大? CPU 是天上一天,内存是地上一年(假设 CPU 执行一条普通指令需要一天,那么 CPU 读写内存得等待一年的时间) 内存和 I/O 阅读全文

posted @ 2022-03-03 21:59 Love&Share 阅读(89) 评论(0) 推荐(0) 编辑

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示