上一页 1 2 3 4 5 6 ··· 13 下一页
摘要: 一、背景: 分布式场景下,接口的开发大都需要保证幂等性。 幂等性:一个接口被调用,不管几次,产生一样的效果,一样返回结果。 接口调用过程中,很可能因为网络等原因进行重试调用,如果不能保证幂等性,那就完犊子了。 例如:用户支付的接口,用户有可能连续点击支付,总不能扣好几次钱吧。 二、场景: 1、前端重 阅读全文
posted @ 2022-01-25 15:21 Diamond-Shine 阅读(1586) 评论(0) 推荐(0)
摘要: 一、背景: 前面了解了分布式锁,做了最简单的入门了解,分布式锁(一)--基础 企业开发中使用最多的分布式锁,是Redis分布式锁,主要考虑到性能,以及Redis使用率高于ZK。 二、Redis实现可靠性分布式锁的条件: 互斥性。在任意时刻,只有一个客户端能持有锁。 不会发生死锁。即使有一个客户端在持 阅读全文
posted @ 2022-01-24 15:52 Diamond-Shine 阅读(202) 评论(0) 推荐(0)
摘要: 一、背景: 如果系统就是一个单体系统,不需要考虑这些问题,最多使用synchronized相关的锁解决并发问题。 但是一个分布式系统,肯定会遇到并发竞争共享资源的问题,这时通常就需要使用分布式锁解决。 二、举个栗子: 举个老生常谈的例子,商品库存的锁定。 用户购买iPhone,肯定需要锁定/扣减对应 阅读全文
posted @ 2022-01-22 14:15 Diamond-Shine 阅读(107) 评论(0) 推荐(0)
摘要: 前面刚学习了AQS的基本原理,主要通过两个队列实现功能(同步队列+等待队列,前者是双向链表,实现加锁和解锁,后者是单向链表,用做同步协作,阻塞、唤醒),正好可以趁热打铁,了解一下ReentrantLock的源码,有了AQS的基础,阅读ReentrantLock的源码是非常简单的,如果没有了解AQS原 阅读全文
posted @ 2022-01-22 14:06 Diamond-Shine 阅读(42) 评论(0) 推荐(0)
摘要: 阻塞队列在日常开发中直接使用比较少,但是在很多工具类或者框架中有很多应用,例如线程池,消息队列等。所以,深入了解阻塞队列也是很有必要的。所以这里来了解一下LinkedBlockingQueue的相关源码,从命名可以看出来是由链表实现的数据结构。 类定义 public class LinkedBloc 阅读全文
posted @ 2022-01-09 10:01 Diamond-Shine 阅读(119) 评论(0) 推荐(0)
摘要: 在并发工具类和并发集合中,可能最复杂的就是jdk1.8+的ConcurrentHashMap源码,相比jdk1.8-,已经抛弃了Segment分段锁的实现方式,采用了Synchronized、CAS、volatile来实现一个线程安全的容器,是HashMap线程安全版本。关于数据结构方面,和Hash 阅读全文
posted @ 2022-01-09 10:00 Diamond-Shine 阅读(46) 评论(0) 推荐(0)
摘要: 简述: CountDownLatch、Semaphore和CyclicBarrier都是并发编程常用、好用的工具类,不需要开发人员使用底层的api,例如join(),可以通过CountDownLatch代替,开箱即用,减少使用底层api出错的可能,而且功能更加强大,CountDownLatch和Se 阅读全文
posted @ 2022-01-09 09:59 Diamond-Shine 阅读(81) 评论(0) 推荐(0)
摘要: 我们肯定都使用过ArrayList,但是多线程或并发环境下,ArrayList作为共享变量被访问,是线程不安全的。我们可以选择自己加锁或Collections.synchronizedList()去实现一个线程安全的容器。除此之外,我们还可以使用今天要学习的CopyOnWriteArrayList。 阅读全文
posted @ 2022-01-09 09:58 Diamond-Shine 阅读(66) 评论(0) 推荐(0)
摘要: 在上篇博客中了解了排他锁的基本源码实现,所以现在我们学习下共享锁的源码,二者的源码实现大部分都是相同的,而且了解了排他锁的原理之后,我们现在阅读共享锁的源码会更加得心应手。 排他锁:当前锁只能被一个线程所持有,也只能有一个线程释放。 共享锁:当前锁可以被多个线程持有,并且可以设置持有锁的线程数量。 阅读全文
posted @ 2022-01-09 09:53 Diamond-Shine 阅读(63) 评论(0) 推荐(0)
摘要: 一、TCC方案 1、基本流程: 1)Try阶段:对各个服务的资源做检测以及对资源进行锁定。 2)Confirm阶段:在各个服务中执行实际的操作。 3)Cancel阶段:如果任何一个服务的业务方法执行出错,执行业务逻辑的回滚操作。 2、使用场景: ==除非系统的一致性要求太高==,系统中核心之核心的场 阅读全文
posted @ 2022-01-09 09:39 Diamond-Shine 阅读(37) 评论(0) 推荐(0)
上一页 1 2 3 4 5 6 ··· 13 下一页