Fork me on GitHub
赵小发

Winter is coming


  • 首页

  • 标签

  • 分类

  • 归档

Curator实现ZooKeeper分布式锁源码

发表于 2019-08-30 | 分类于 分布式&微服务 | 阅读次数:
字数统计: 432 | 阅读时长 ≈ 1
3. Curator源码上一篇文章,基于ZooKeeper的分布式锁 已经讲了原理和使用了。接下来我们来看看 Curator 实现分布式锁的源码。 再贴上我们的实现代码: 123456789101112131415161718public class CuratorTest { pu ...
阅读全文 »

基于ZooKeeper的分布式锁

发表于 2019-08-30 | 分类于 分布式&微服务 | 阅读次数:
字数统计: 2.1k | 阅读时长 ≈ 7
1. 原理底层是基于 ZooKeeper 的临时顺序节点。 ZooKeeper 的节点类型可以分为持久节点、持久顺序节点、临时节点、以及临时顺序节点。在基于 Dubbo 的分布式系统中,使用 ZooKeeper 做注册中心,就是使用的临时节点。如果对 ZooKeeper 基础知识不了解的同学可以百度 ...
阅读全文 »

基于Redis的分布式锁之ReentrantLock

发表于 2019-08-30 | 分类于 分布式&微服务 | 阅读次数:
字数统计: 3.9k | 阅读时长 ≈ 16
1. 原理利用Redis的setnx命令,此命令是原子性操作。 2. 加锁设置锁和设置过期时间应该是一个原子性操作,防止出现锁设置成功,但是执行设置锁过期时间失败导致的死锁现象。 伪代码: setnx(key,value,expire) key的取值:一般是业务id,比如商品编号等。 value ...
阅读全文 »

分布式锁使用场景

发表于 2019-08-30 | 分类于 分布式&微服务 | 阅读次数:
字数统计: 310 | 阅读时长 ≈ 1
超卖血案案例我之前有做过p2p理财,其中投资买标会涉及到超募问题,其实和电商中的超卖问题类似。考虑到很多人不了解p2p业务,以下就以电商为例来讲。 看下图: 这是一个典型的电商下订单扣库存的操作流程。 假设现在库存只剩一个,有两个线程A和B查询库存,相隔时间极短。 此时A通过2步骤查询到库存还有一 ...
阅读全文 »

Synchronized失效

发表于 2019-02-21 | 分类于 并发编程 | 阅读次数:
字数统计: 745 | 阅读时长 ≈ 2
1. 前言前两天,有个群友遇到个问题,明明加了 synchronized 关键字,为什么就不起作用呢?锁怎么就失效了呢?然后我看了他发给我的代码。 大致需求是这样的,客户表中类型 (type) 为 1 的手机号不能重复,但是其他类型的手机号可以重复,这就意味着 mobile 是不能加唯一索引的,mo ...
阅读全文 »

Synchronized关键字

发表于 2019-02-17 | 分类于 并发编程 | 阅读次数:
字数统计: 1.6k | 阅读时长 ≈ 7
1. Synchronized 锁的是什么?我们都知道 Synchronized 是锁,而且是重量级锁,它保证原子性和可见性,但是不保证有序性。那么它到底锁的是什么? 答案很简单:锁的是对象,对象分为两种,一种是实例对象,一种是类的 Class 对象。有的人习惯把锁实例对象的称为对象锁,锁 Clas ...
阅读全文 »

读写锁

发表于 2019-02-15 | 分类于 并发编程 | 阅读次数:
字数统计: 1.6k | 阅读时长 ≈ 7
1. 前言如果使用 synchronized 关键字,那么无论是读请求,还是写请求,都是串行化,十分影响性能,而读请求本身是可以并行的。互联网中大部分请求都是读请求,如果能允许并行读,写的时候使用串行,效率会更高。 2. 读写分离锁有一点值得注意的是,只要涉及到写操作,就一定要加锁,串行化。 2.1 ...
阅读全文 »

Java集合—HashMap之红黑树

发表于 2019-02-07 | 分类于 Java集合 | 阅读次数:
字数统计: 2.9k | 阅读时长 ≈ 11
2. 源码解析上一篇文章 Java集合—HashMap之resize方法 已经讲完了 HashMap 的扩容方法了,之前讲 HashMap 的文章中在遇到红黑树相关的部分都跳过了,那么这篇文章就把之前留下的坑填起来。 2.5 红黑树2.5.1 多大的数据量会转化为红黑树?我们首先想一想,为了降低 h ...
阅读全文 »

Java集合—HashMap之resize方法

发表于 2019-02-06 | 分类于 Java集合 | 阅读次数:
字数统计: 2.9k | 阅读时长 ≈ 11
2. 源码解析上一篇文章 Java集合—HashMap之梳理put方法逻辑 已经详细梳理了 put 方法的逻辑,着重讲述了在遇到 hash 冲突时链表是如何一步一步变化的。但是遗留了两个问题,一是扩容方法,二是红黑树结构相关的逻辑。那么这一篇文章,我们就来看看 HashMap 是怎么扩容的。 2.4 ...
阅读全文 »

Java集合—HashMap之梳理put方法逻辑

发表于 2019-02-06 | 分类于 Java集合 | 阅读次数:
字数统计: 1.5k | 阅读时长 ≈ 6
2. 源码解析上一篇文章 Java集合—HashMap之hash优化算法 已经讲了 HashMap 的 hash 优化算法,在讲优化算法的时候提到了 put 方法,这个最核心,最复杂的方法。这一篇我们来详细梳理下 put 方法的逻辑。 2.3 梳理put方法逻辑我们先贴出来 put 方法的代码: 1 ...
阅读全文 »

Java集合—HashMap之hash优化算法

发表于 2019-02-05 | 分类于 Java集合 | 阅读次数:
字数统计: 3.4k | 阅读时长 ≈ 14
1. 原理HashMap 底层是数组 + 链表 + 红黑树。 数组我们很熟悉,支持随机访问,所以在最优情况下,即 HashMap 没有出现 hash 冲突,没有形成链表或红黑树结构,此时数据都存在数组中,get 方法的查询时间复杂度为 O(1) 。 链表查询时间复杂度 O(n) ,红黑树 O($lo ...
阅读全文 »

Java集合—LinkedList

发表于 2019-02-04 | 分类于 Java集合 | 阅读次数:
字数统计: 1.9k | 阅读时长 ≈ 7
1. 原理LinkedList 底层是双向链表,对应的是链表这种基本的数据结构。同样,它的大多数特性都来源于链表。 我们看看 LinkedList 类的继承结构: 123public class LinkedList<E> extends AbstractSequentialLis ...
阅读全文 »

Java集合—ArrayList

发表于 2019-02-03 | 分类于 Java集合 | 阅读次数:
字数统计: 1.9k | 阅读时长 ≈ 7
1. 原理我们先看看 ArrayList 的类继承体系。 123public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable ...
阅读全文 »

集合中的modCount

发表于 2019-02-02 | 分类于 Java集合 | 阅读次数:
字数统计: 859 | 阅读时长 ≈ 3
1. modCount 在各集合中的使用12345678// ArrayListprotected transient int modCount = 0;// HashMaptransient int modCount;// LinkedListprotected transient int mo ...
阅读全文 »

Java SPI

发表于 2019-01-08 | 分类于 Java基础 | 阅读次数:
字数统计: 1.4k | 阅读时长 ≈ 6
1. SPI是什么?最近在看 Spring 和 Dubbo 的源码,发现这两个框架都有自己的 SPI 机制,决定了解下 SPI 。 SPI (Service Provider Interface)其实是一种思想,但凡涉及到思想的东西,都是看一眼感觉自己会,看代码也看得懂,然后自己就是不会用,或者用的 ...
阅读全文 »
123
欢迎加微信交流

欢迎加微信交流

33 日志
10 分类
25 标签
© 2022 欢迎加微信交流
本站总访问量次 | 本站访客数人
博客全站共59.1k字