摘要: 阻塞队列在日常开发中直接使用比较少,但是在很多工具类或者框架中有很多应用,例如线程池,消息队列等。所以,深入了解阻塞队列也是很有必要的。所以这里来了解一下LinkedBlockingQueue的相关源码,从命名可以看出来是由链表实现的数据结构。 类定义 public class LinkedBloc 阅读全文
posted @ 2022-01-09 10:01 Diamond-Shine 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 在并发工具类和并发集合中,可能最复杂的就是jdk1.8+的ConcurrentHashMap源码,相比jdk1.8-,已经抛弃了Segment分段锁的实现方式,采用了Synchronized、CAS、volatile来实现一个线程安全的容器,是HashMap线程安全版本。关于数据结构方面,和Hash 阅读全文
posted @ 2022-01-09 10:00 Diamond-Shine 阅读(35) 评论(0) 推荐(0) 编辑
摘要: 简述: CountDownLatch、Semaphore和CyclicBarrier都是并发编程常用、好用的工具类,不需要开发人员使用底层的api,例如join(),可以通过CountDownLatch代替,开箱即用,减少使用底层api出错的可能,而且功能更加强大,CountDownLatch和Se 阅读全文
posted @ 2022-01-09 09:59 Diamond-Shine 阅读(49) 评论(0) 推荐(0) 编辑
摘要: 我们肯定都使用过ArrayList,但是多线程或并发环境下,ArrayList作为共享变量被访问,是线程不安全的。我们可以选择自己加锁或Collections.synchronizedList()去实现一个线程安全的容器。除此之外,我们还可以使用今天要学习的CopyOnWriteArrayList。 阅读全文
posted @ 2022-01-09 09:58 Diamond-Shine 阅读(57) 评论(0) 推荐(0) 编辑
摘要: 在上篇博客中了解了排他锁的基本源码实现,所以现在我们学习下共享锁的源码,二者的源码实现大部分都是相同的,而且了解了排他锁的原理之后,我们现在阅读共享锁的源码会更加得心应手。 排他锁:当前锁只能被一个线程所持有,也只能有一个线程释放。 共享锁:当前锁可以被多个线程持有,并且可以设置持有锁的线程数量。 阅读全文
posted @ 2022-01-09 09:53 Diamond-Shine 阅读(50) 评论(0) 推荐(0) 编辑
摘要: 一、TCC方案 1、基本流程: 1)Try阶段:对各个服务的资源做检测以及对资源进行锁定。 2)Confirm阶段:在各个服务中执行实际的操作。 3)Cancel阶段:如果任何一个服务的业务方法执行出错,执行业务逻辑的回滚操作。 2、使用场景: ==除非系统的一致性要求太高==,系统中核心之核心的场 阅读全文
posted @ 2022-01-09 09:39 Diamond-Shine 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 一、事务的ACID: 1、Atomic:原子性 多条SQL执行,要么一起成功,要么一起失败,执行状态保持一致。 2、Consistency:一致性 一组SQL执行之前,数据必须是准确的,执行之后,数据也必须是准确的。 必须符合逻辑计算。 3、Isolation:隔离性 多个事务在执行的时候不能互相干 阅读全文
posted @ 2022-01-09 09:27 Diamond-Shine 阅读(146) 评论(0) 推荐(0) 编辑
摘要: (分布式事务实践,选型调研) 一、写在开始: ==除了极个别系统模块,如支付、订单这种,其余都不推荐使用分布式事务框架来解决问题,会使系统复杂度增加,可能会导致更多的问题。== 一般的业务系统,通常考虑消息补偿、job处理、系统监控报警、人工等解决方式,毕竟你的系统没那么多一致性问题。 就是大厂也是 阅读全文
posted @ 2022-01-09 09:24 Diamond-Shine 阅读(82) 评论(0) 推荐(0) 编辑