以Lock作为切入点 Lock API Lock接口常见实现类 ReentrantLock的简单使用 什么是AQS? AQS的两种功能 ReentrantLock的类图 AQS的内部实现 释放锁以及添加Node对与队列的变化 添加节点 释放锁移除节点 AQS的源码解析 ReentrantLock整体 ...
分类:
其他好文 时间:
2020-08-04 18:18:47
阅读次数:
88
import java.util.concurrent.locks.ReentrantLock; public class AsynObject { private volatile int count; private ReentrantLock lock = new ReentrantLock( ...
分类:
编程语言 时间:
2020-08-02 16:13:31
阅读次数:
81
我们继续接上篇,本篇是对unlock方法的跟踪解析。 调用lock.unlock(); 进入后发现,还是使用了sync对象的方法,上篇中以及说明了,sync实际上是对于AQS的一种实现,实现一部分AQS提供的抽象方法。 我们进入release方法看看 我们能看到,进入后,传递的参数是一,这个是加锁的 ...
分类:
其他好文 时间:
2020-07-26 16:04:56
阅读次数:
80
可重入锁 可重锁是指同一个线程,外层函数获取锁后,内层函数可以自动获取到锁。 java中synchronized和ReentrantLock都是可重入锁。 对于synchronized,其实现机制有jvm实现。 对于ReentrantLock,其继承自父类AQS,其父类AQS中维护了一个同步状态st ...
分类:
编程语言 时间:
2020-07-23 22:39:26
阅读次数:
64
公平和非公平锁 公平锁:是指多个线程按照申请锁的顺序来获取锁,类似排队,先来后到。 非公平锁:是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁在高并发的情况下,有可能会造成优先级反转或者饥饿现象。 两者区别: 并发包中ReentrantLock的创建可以指定 ...
分类:
其他好文 时间:
2020-07-21 09:46:12
阅读次数:
82
Semaphore Semaphore 字面意思是信号量的意思,它的作用是控制访问特定资源的线程数目。应用场景:资源访问,服务限流。 Semaphore 实现AbstractQueuedSynchronizer的方法与ReentrantLock一样 Semaphore构造方法 public Sema ...
分类:
其他好文 时间:
2020-07-18 22:55:40
阅读次数:
108
Java的内置锁一直都是备受争议的,在JDK 1.6之前,synchronized这个重量级锁其性能一直都是较为低下,虽然在1.6后,进行大量的锁优化策略,但是与Lock相比synchronized还是存在一些缺陷的:虽然synchronized提供了便捷性的隐式获取锁释放锁机制(基于JVM机制), ...
分类:
其他好文 时间:
2020-07-18 22:47:20
阅读次数:
69
同步框架AbstractQueuedSynchronizer Java并发编程核心在于java.concurrent.util包 而juc当中的大多数同步器实现都是围绕着共同的基础行为,比如等待队列、条件队列、独占获取、共享获取等,而这个行为的抽象就是基于AbstractQueuedSynchron ...
分类:
其他好文 时间:
2020-07-18 19:45:38
阅读次数:
71
AQS源码解析 AQS是什么? 全称是AbstractQueuedSynchronizer,位于java.util.concurrent.locks包下面。AbstractQueuedSynchronizer是一个抽象类,其常见的派生子类有,ReentrantLock.Sync内部类。 申请锁入口方 ...
分类:
其他好文 时间:
2020-07-18 16:12:02
阅读次数:
80
摘要本分旨在快速理解分布锁的实现原理,以及不同实现方式存在的问题,阅读此文需要对mysql、zk、redis有一定的了解。 锁在Java中synchronized关键字和ReentrantLock可重入锁在我们的代码中是经常见的,一般我们用其在多线程环境中控制对资源的并发访问,但是随着分布式的快速发 ...
分类:
其他好文 时间:
2020-07-15 10:47:05
阅读次数:
74