Redis为单进程单线程模式,采用队列模式将并发访问的请求变成串行访问,并且多客户端对Redis的访问不存在竞争关系。 以下将会讲解如何使用Redis实现一个可靠的,自旋分布式锁。以及实现的思路,还有实现时会遇到的常见错误。 当然,这些实现的都是不可重入的。在最后,还会讲一下,实现可重入锁的思路。 ...
分类:
其他好文 时间:
2020-01-22 18:22:45
阅读次数:
80
数据结构 ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成。Segment实际继承自可重入锁(ReentrantLock),在ConcurrentHashMap里扮演锁的角色;HashEntry则用于存储键值对数据。一个ConcurrentHashMap里 ...
分类:
编程语言 时间:
2020-01-05 22:21:10
阅读次数:
90
类注释 属性 方法 Constructor: CopyOnWriteArrayList() CopyOnWriteArrayList(Collection c) CopyOnWriteArrayList(E[] toCopyIn) 重要方法 set() add() add(int index, E ...
分类:
编程语言 时间:
2020-01-04 12:23:41
阅读次数:
72
JVM,并发,锁相关: 1.请你谈谈对volatile的理解,volatile是否存在伪共享问题。 2.cas你知道吗? 3.原子类AtomicInteger的ABA问题谈谈?原子更新引用知道吗? 4.公平锁/非公平锁/可重入锁/递归锁/自旋锁谈谈你的理解?请手写一个自旋锁。 5.CountDown ...
分类:
编程语言 时间:
2019-12-31 18:57:50
阅读次数:
86
前言 ReentrantLock即可重入锁,实现了Lock和Serializable接口 在java环境下ReentrantLock和Synchronized都是可重入锁 ReentrantLock构造函数中提供两种锁:创建公平锁和非公平锁(默认) ReentrantLock有三个内部类 Sync、 ...
分类:
其他好文 时间:
2019-12-30 14:42:02
阅读次数:
84
一、公平锁/非公平锁/可重入锁/递归锁/自旋锁谈谈你的理解?请手写一个自旋锁 1. 公平锁和非公平锁: 1.1 是什么? 公平锁:是指多个线程按照申请锁的顺序来获取锁,类似排队打饭,先来后到。 非公平锁:是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获得锁;在高 ...
分类:
编程语言 时间:
2019-12-30 09:54:13
阅读次数:
91
概念 ReentrantLock,可重入锁。在多线程中,可以通过加锁保证线程安全。 ReentrantLock,是基于AQS实现的。 加锁和解锁 加锁: 解锁 内部类Sync继承AQS,因此可以维护状态变量state,通过acquire()获取state、release()释放state。后文会涉及 ...
分类:
其他好文 时间:
2019-12-19 11:25:28
阅读次数:
84
synchronized和volatile volatile :保证内存可见性,但是不保证原子性; synchronized:同步锁,既能保证内存可见性,又能保证原子性; synchronized实现可重入锁 (1.持有同一锁自动获取 2.继承锁) 锁定的对象有两种:1.类的实例(对象锁) 2.类对 ...
分类:
其他好文 时间:
2019-12-09 21:42:17
阅读次数:
98
我们使用的synchronized加的锁是可以延续使用的,如下: public void test() { //第一次获得锁 synchronized(this) { while(true) { //第二次获得同样的锁 synchronized(this) { System.out.println( ...
分类:
编程语言 时间:
2019-12-09 19:07:54
阅读次数:
79
Java锁原理学习 为了学习Java锁的原理,参照ReentrantLock实现了自己的可重入锁,代码如下: 先上AQS的相关方法: 以下是自己实现的MyLock: 测试程序: ...
分类:
编程语言 时间:
2019-12-03 01:45:31
阅读次数:
107