会员
众包
新闻
博问
闪存
赞助商
HarmonyOS
Chat2DB
所有博客
当前博客
我的博客
我的园子
账号设置
会员中心
简洁模式
...
退出登录
注册
登录
Diamond-Shine
Java、fitness、hunger and desire
博客园
首页
新随笔
管理
上一页
1
2
3
4
5
6
···
13
下一页
2022年1月25日
如何保证幂等性
摘要: 一、背景: 分布式场景下,接口的开发大都需要保证幂等性。 幂等性:一个接口被调用,不管几次,产生一样的效果,一样返回结果。 接口调用过程中,很可能因为网络等原因进行重试调用,如果不能保证幂等性,那就完犊子了。 例如:用户支付的接口,用户有可能连续点击支付,总不能扣好几次钱吧。 二、场景: 1、前端重
阅读全文
posted @ 2022-01-25 15:21 Diamond-Shine
阅读(1586)
评论(0)
推荐(0)
2022年1月24日
分布式锁(二)--Redis实现分布式锁
摘要: 一、背景: 前面了解了分布式锁,做了最简单的入门了解,分布式锁(一)--基础 企业开发中使用最多的分布式锁,是Redis分布式锁,主要考虑到性能,以及Redis使用率高于ZK。 二、Redis实现可靠性分布式锁的条件: 互斥性。在任意时刻,只有一个客户端能持有锁。 不会发生死锁。即使有一个客户端在持
阅读全文
posted @ 2022-01-24 15:52 Diamond-Shine
阅读(202)
评论(0)
推荐(0)
2022年1月22日
分布式锁(一)--基础
摘要: 一、背景: 如果系统就是一个单体系统,不需要考虑这些问题,最多使用synchronized相关的锁解决并发问题。 但是一个分布式系统,肯定会遇到并发竞争共享资源的问题,这时通常就需要使用分布式锁解决。 二、举个栗子: 举个老生常谈的例子,商品库存的锁定。 用户购买iPhone,肯定需要锁定/扣减对应
阅读全文
posted @ 2022-01-22 14:15 Diamond-Shine
阅读(107)
评论(0)
推荐(0)
并发和多线程(十六)--ReentrantLock源码解析
摘要: 前面刚学习了AQS的基本原理,主要通过两个队列实现功能(同步队列+等待队列,前者是双向链表,实现加锁和解锁,后者是单向链表,用做同步协作,阻塞、唤醒),正好可以趁热打铁,了解一下ReentrantLock的源码,有了AQS的基础,阅读ReentrantLock的源码是非常简单的,如果没有了解AQS原
阅读全文
posted @ 2022-01-22 14:06 Diamond-Shine
阅读(42)
评论(0)
推荐(0)
2022年1月9日
并发和多线程(二十)--LinkedBlockingQueue源码解析
摘要: 阻塞队列在日常开发中直接使用比较少,但是在很多工具类或者框架中有很多应用,例如线程池,消息队列等。所以,深入了解阻塞队列也是很有必要的。所以这里来了解一下LinkedBlockingQueue的相关源码,从命名可以看出来是由链表实现的数据结构。 类定义 public class LinkedBloc
阅读全文
posted @ 2022-01-09 10:01 Diamond-Shine
阅读(119)
评论(0)
推荐(0)
并发和多线程(十九)--ConcurrentHashMap源码解析(jdk1.8)
摘要: 在并发工具类和并发集合中,可能最复杂的就是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源码解析
摘要: 简述: CountDownLatch、Semaphore和CyclicBarrier都是并发编程常用、好用的工具类,不需要开发人员使用底层的api,例如join(),可以通过CountDownLatch代替,开箱即用,减少使用底层api出错的可能,而且功能更加强大,CountDownLatch和Se
阅读全文
posted @ 2022-01-09 09:59 Diamond-Shine
阅读(81)
评论(0)
推荐(0)
并发和多线程(十七)--CopyOnWriteArrayList源码解析
摘要: 我们肯定都使用过ArrayList,但是多线程或并发环境下,ArrayList作为共享变量被访问,是线程不安全的。我们可以选择自己加锁或Collections.synchronizedList()去实现一个线程安全的容器。除此之外,我们还可以使用今天要学习的CopyOnWriteArrayList。
阅读全文
posted @ 2022-01-09 09:58 Diamond-Shine
阅读(66)
评论(0)
推荐(0)
并发和多线程(十五)--AbstractQueuedSynchronizer共享锁和Condition条件队列
摘要: 在上篇博客中了解了排他锁的基本源码实现,所以现在我们学习下共享锁的源码,二者的源码实现大部分都是相同的,而且了解了排他锁的原理之后,我们现在阅读共享锁的源码会更加得心应手。 排他锁:当前锁只能被一个线程所持有,也只能有一个线程释放。 共享锁:当前锁可以被多个线程持有,并且可以设置持有锁的线程数量。
阅读全文
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
下一页
公告