AbstractQueuedSynchronizer(AQS)类如其名,抽象的队列式同步容器,AQS定义类一套多线程访问共享资源的同步器,许多同步类的实现都依赖于它,比如之前学习的ReentrantLock/Semaphore/CountDownLatch。1.AQSAQS阻塞队列.png1。自定义同步器在实现时只需要实现共享资源state的获取于释放方式即可,至于具体线程等待队列的维护(如获取资
分类:
其他好文 时间:
2019-03-27 00:11:32
阅读次数:
154
一、概念: 乐观锁:适用于写少读多的情景,因为这种乐观锁相当于java的cas(比较并替换),所以多条数据同事过来的时候不用等待,可以立即进行返回 悲观锁:适用于写多读少的情景,这种情况也相当于java的synchronized,reentrantLock等,大量数据过来的时候,只有一条被写入,其他 ...
分类:
数据库 时间:
2019-03-26 13:17:54
阅读次数:
518
1.同步 synchronized 2.轮询 while volatile 3.wait/notify机制 syncrhoized加锁的线程的Object类的wait()/notify()/notifyAll() ReentrantLock类加锁的线程的Condition类的await()/sign ...
分类:
编程语言 时间:
2019-03-21 23:07:29
阅读次数:
258
悲观锁 总是架设最坏的请款,每次拿数据都认为别人会修改数据,所以要加锁,别人只能等待,直到我释放锁才能拿到锁;数据库的行锁、表锁、读锁、写锁都是这种方式,java中的synchronized和ReentrantLock也是悲观锁的思想。 乐观锁 总是架设最好的情况,每次拿数据都认为别人不会修改数据, ...
分类:
其他好文 时间:
2019-03-12 14:17:13
阅读次数:
189
看了下J.U.C并发包下的ReentrantLock源码,费了不少劲,做个小总结吧,尽量用通俗易懂的语言描述,配上一些图说明。 ReentrantLock介绍 ReentrantLock是基于AbstractQueuedSynchronizer(AQS框架)设计的,类里面有一个私有sync成员属性, ...
分类:
其他好文 时间:
2019-03-09 01:21:34
阅读次数:
199
package futrue; import java.util.concurrent.locks.ReentrantLock; public class CustomArrayList { private ReentrantLock reentrantLock = new ReentrantLoc... ...
分类:
其他好文 时间:
2019-03-06 16:36:25
阅读次数:
173
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /* * 一、用于解决多线程安全问题的方式: * * synchronized:隐式锁 * 1. 同步代码块 * * 2.... ...
分类:
其他好文 时间:
2019-03-05 14:01:44
阅读次数:
181
import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /* * 编写一个程序,开启 3... ...
分类:
其他好文 时间:
2019-03-05 13:57:56
阅读次数:
150
import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.locks.Reentra... ...
分类:
其他好文 时间:
2019-03-02 18:47:00
阅读次数:
138
1.ReentrantLock是基于AQS实现的一种重入锁。 2.先介绍下公平锁/非公平锁 公平锁 公平锁是指多个线程按照申请锁的顺序来获取锁。 非公平锁 非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。有可能,会造成优先级反转或者饥饿现象。 3. ...
分类:
其他好文 时间:
2019-02-26 19:14:21
阅读次数:
157