在使用ReentrantLock创建锁实例时,即可以创建公平锁,也可以创建非公平锁.默认是创建非公平锁. Lock lock = new ReentrantLock(true); // 创建一个公平锁 无论是创建公平锁,还是创建非公平锁,其底层都是使用AQS来实现的, 唯一的不同,就是非公平在加入C ...
分类:
其他好文 时间:
2019-12-22 00:58:11
阅读次数:
123
private static ScheduledExecutorService swapExpiredPool = new ScheduledThreadPoolExecutor(10); private ReentrantLock lock = new ReentrantLock(); priva ...
分类:
编程语言 时间:
2019-12-20 18:43:43
阅读次数:
218
ConcurrentHashMap 内部结构 在JDK1.8之前的实现结构是:ReentrantLock+Segment+HashEntry+链表 JDK1.8之后的实现结构是:synchronized+CAS+Node+链表或红黑树(与HashMap一致) 而1.8之前锁的是Segment,1.8 ...
分类:
其他好文 时间:
2019-12-20 18:42:46
阅读次数:
74
/** * ReentrantLock使用Condition对象来实现wait和notify的功能* 使用Condition时,引用的Condition对象必须从Lock实例的newCondition()返回,这样才能获得一个绑定了Lock实例的Condition实例* Condition提供的aw ...
分类:
其他好文 时间:
2019-12-20 15:31:11
阅读次数:
99
前言 前两篇我们讲述了ReentrantLock的加锁释放锁过程,相对而言比较简单,本篇进入深水区,看看ReentrantReadWriteLock-读写锁的加锁过程是如何实现的,继续拜读老Lea凌厉的代码风。 一、读写锁的类图 读锁就是共享锁,而写锁是独占锁。读锁与写锁之间的互斥关系为:读读可同时 ...
分类:
其他好文 时间:
2019-12-19 23:12:58
阅读次数:
70
AbstractQueuedSynchronizer简称为AQS,AQS是ReentrantLock、CountdownLatch、CycliBarrier等并发工具的原理/基础,所以了解AQS的原理对学习J.U.C包很重要。 基本原理: 1.AQS中包含两种队列(FIFO),同步队列+条件队列,底 ...
分类:
编程语言 时间:
2019-12-19 19:27:05
阅读次数:
69
概念 ReentrantLock,可重入锁。在多线程中,可以通过加锁保证线程安全。 ReentrantLock,是基于AQS实现的。 加锁和解锁 加锁: 解锁 内部类Sync继承AQS,因此可以维护状态变量state,通过acquire()获取state、release()释放state。后文会涉及 ...
分类:
其他好文 时间:
2019-12-19 11:25:28
阅读次数:
84
1、五种阻塞队列介绍 ArrayBlockingQueue 有界队列,底层使用数组实现,并发控制使用ReentrantLock控制,不管是插入操作还是读取操作,都需要获取锁之后才能执行。 LinkedBlockingQueue 底层基于单向链表实现,既可以当做有界队列,也可以当做无界队列使用。使用两 ...
分类:
编程语言 时间:
2019-12-18 23:34:53
阅读次数:
125
synchronized 和 lock 的用法区别 synchronized(隐式锁):在需要同步的对象中加入此控制,synchronized 可以加在方法上,也可以加在特定代码块中,括号中表示需要锁的对象。 lock(显示锁):需要显示指定起始位置和终止位置。一般使用 ReentrantLock ...
分类:
其他好文 时间:
2019-12-17 20:46:41
阅读次数:
97
概念 AQS全称 AbstractQueuedSynchronizer。 AQS是一个并发包的基础组件,用来实现各种锁,各种同步组件的。它包含了state变量、加锁线程、等待队列等并发中的核心组件。 ReentrantLock、Semaphore、CountDownLatch、FutrueTask, ...
分类:
其他好文 时间:
2019-12-17 00:54:44
阅读次数:
126