/** * 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
分布式锁 为了保证一个方法或属性在高并发情况下的同一时间只能被一个线程访问,在单机部署的情况下,可以使用ReentrantLock或Synchronized进行互斥控制。随着发展,单机部署的系统已经不能满足业务的需要,越来越多的系统进化成分布式集群系统,原本在单机运行的锁控制已经不能实现“一个方法或 ...
分类:
其他好文 时间:
2019-12-16 10:02:13
阅读次数:
86
要深入了解java并发知识,AbstractQueuedSynchronizer(AQS)是必须要拿出来深入学习的,AQS可以说是贯穿了整个JUC并发包,例如ReentrantLock,CountDownLatch,CyclicBarrier等并发类都涉及到了AQS。接下来就对AQS的实现原理进行分 ...
分类:
编程语言 时间:
2019-12-15 18:40:11
阅读次数:
107
java 基本运算 各种运算符 用法等 进位 二进制 左移 右移 多线程基础 多线程进阶 线程池 java原子性操作等基础 java的concurrent包 以及各种java自带系统属性的理解和应用 volitale Synchronized ReentrantLock transientjava的 ...
分类:
其他好文 时间:
2019-12-13 19:30:37
阅读次数:
76