1.0 数据结构 ConcurrentHashMap 是由 Segment 数组 结构和 HashEntry 数组 结构组成。 Segment 是一种可重入锁 ReentrantLock,在 ConcurrentHashMap 里扮演锁的角色,HashEntry 则用于存储键值对数据。 Concur ...
分类:
其他好文 时间:
2019-10-21 16:09:11
阅读次数:
100
ReentrantLock ReentrantLock是AQS中独占模式的一种实现。内部定义了一个继承了AQS类的Syn类。该类有两个子类。而Syn类定义模板方法lock()方法给子类去实现。其中一个子类是实现公平锁,另一个是实现非公平锁。 非公平锁的实现 非公平锁的实现很简单,通过CAS操作判断s ...
分类:
其他好文 时间:
2019-10-19 18:48:32
阅读次数:
86
在了解ReentrantLock之前,我们首先回忆一下 synchronized ,synchronized是java内置的关键字,锁的获取和释放都是由jvm实现,因此用户就不需要显示的去释放锁,是一种独占的加锁方式,但是虽然方便,也有一定的弊端: 1 ...
分类:
其他好文 时间:
2019-10-13 20:44:24
阅读次数:
92
重入锁Java中的重入锁(即ReentrantLock)与Java内置锁一样,是一种排它锁。使用synchronized的地方一定可以用ReentrantLock代替。重入锁需要显示请求获取锁,并显示释放锁。为了避免获得锁后,没有释放锁,而造成其它线程无法获得锁而造成死锁,一般建议将释放锁操作放在f... ...
分类:
编程语言 时间:
2019-10-09 17:40:52
阅读次数:
129
在CopyOnWriteArrayList的源码中有一个细节值得学习,就是在addIfAbsent方法中ReentrantLock的用法,先是将一个这个成员变量this.lock重新赋值给一个局部变量lock之后再使用它,貌似跟java的内存模型有关,具体说明参考这篇文章:https://www.j... ...
分类:
其他好文 时间:
2019-10-08 19:10:02
阅读次数:
195
一、CAS概念 1. 悲观锁:一个线程加锁后其他线程会挂起,直到持有锁的线程释放锁,悲观锁从最坏的情况考虑问题。独占锁是一种悲观锁,例如synchronized关键字加锁,例如可重入锁ReentrantLock 2. 乐观锁:不加锁,多个线程共同执行,如果发生了冲突,就去重试(do...while. ...
分类:
其他好文 时间:
2019-10-05 18:18:43
阅读次数:
81
显式锁-Lock与ReadWriteLockJDK针对Lock的主要实现是ReentrantLock,ReadWriteLock实现是ReentrantReadWriteLock。本文主要介绍ReentrantLock。 ReentrantReadWriteLock两把锁共享一个等待队列,两把锁的状 ...
分类:
其他好文 时间:
2019-10-04 09:51:30
阅读次数:
66
ghuan1993A 基本语法 多态 final static 序列化 String 集合 hasCode 泛型 内部类 自定义注解 设计模式 Jdk 多线程 CAS volatile ThreadLocal 线程池 JUC并发包 锁 synchronized ReentrantLock Maven ...
分类:
编程语言 时间:
2019-10-04 09:20:29
阅读次数:
88
问题 (1)什么是分布式锁? (2)为什么需要分布式锁? (3)mysql如何实现分布式锁? (4)mysql分布式锁的优点和缺点? 简介 随着并发量的不断增加,单机的服务迟早要向多节点或者微服务进化,这时候原来单机模式下使用的synchronized或者ReentrantLock将不再适用,我们迫 ...
分类:
数据库 时间:
2019-10-02 10:39:20
阅读次数:
107
在多线程并发的情况下,我们可以使用锁来保证一个代码块在同一时间内只能由一个线程访问。比如Java的synchronized关键字和Reentrantlock类等等。 这样子可以保证在同一个JVM进程内的多个线程同步执行。 如果在分布式的集群环境中,如何保证不同节点的线程同步执行呢? 怎么才能在分布式 ...
分类:
其他好文 时间:
2019-10-02 00:37:40
阅读次数:
98