前言 最近开始读JDK源码,所有心得准备总结成一个专栏,JDK Analysis系列的第一篇,就从万众瞩目的ReentrantLock开始吧,而谈到ReentrantLock,就不得不说AQS,它是AbstractQueuedSynchronizer类的简称,Doug Lea上神在JDK1.5将其引 ...
分类:
其他好文 时间:
2017-10-23 12:51:46
阅读次数:
175
1、自旋锁 2、自旋锁的其他种类 3、阻塞锁 4、可重入锁 5、读写锁 6、互斥锁 7、悲观锁 8、乐观锁 9、公平锁 10、非公平锁 11、偏向锁 12、对象锁 13、线程锁 14、锁粗化 15、轻量级锁 16、锁消除 17、锁膨胀 18、信号量 ...
分类:
编程语言 时间:
2017-09-24 15:29:45
阅读次数:
160
基于AQS的锁(比如ReentrantLock)原理大体是这样:有一个state变量,初始值为0,假设当前线程为A,每当A获取一次锁,status++. 释放一次,status--.锁会记录当前持有的线程。当A线程拥有锁的时候,status>0. B线程尝试获取锁的时候会对这个status有一个CA ...
分类:
其他好文 时间:
2017-09-08 11:37:29
阅读次数:
134
1 公平锁/非公平锁 公平锁是指多个线程按照申请锁的顺序来获取锁。 非公平锁是指多个线程按照申请锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁。有可能,会造成优先级反转或者饥饿现象。 对于Java ReentrantLock而言,通过构造函数指定该锁是否是公平锁,默认是非 ...
分类:
编程语言 时间:
2017-09-04 00:48:05
阅读次数:
272
获取非公平锁(基于JDK1.7.0_40) 非公平锁和公平锁在获取锁的方法上,流程是一样的;它们的区别主要表现在“尝试获取锁的机制不同”。简单点说,“公平锁”在每次尝试获取锁时,都是采用公平策略(根据等待队列依次排序等待);而“非公平锁”在每次尝试获取锁时,都是采用的非公平策略(无视等待队列,直接尝 ...
分类:
编程语言 时间:
2017-08-03 00:56:43
阅读次数:
212
前一篇博客简介了ReentrantLock的定义和与synchronized的差别,以下尾随LZ的笔记来扒扒ReentrantLock的lock方法。我们知道ReentrantLock有公平锁、非公平锁之分,所以lock()我也已公平锁、非公平锁来进行阐述。首先我们来看ReentrantLock的结 ...
分类:
编程语言 时间:
2017-07-28 23:42:15
阅读次数:
219
用法: web.xml: <!-- druid 数据源,用于采集 web-jdbc 关联监控的数据 --> <filter> <filter-name>DruidWebStatFilter</filter-name> <filter-class>com.alibaba.druid.support.h ...
分类:
数据库 时间:
2017-07-27 20:13:50
阅读次数:
240
ReentrantLock重入锁 ReentrantLock是Java并发包中互斥锁,它有公平锁和非公平锁两种实现方式, 重入的意思就是,如果已经获得了锁,如果执行期间还需要获得这个锁的话,会直接获得所,不会被阻塞,获得锁的次数加1;每执行一次unlock,持有锁的次数减1,当为0时释放锁。这点,S... ...
分类:
其他好文 时间:
2017-07-08 17:48:35
阅读次数:
146
锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。这些已经写好提供的锁为我们开发提供了便利,但是锁的具体性质以及类型却很少被提及。本系列文章将分析JAVA下常见的锁名称以及特性,为大家答疑解 惑。 1、自旋锁 自旋 ...
分类:
编程语言 时间:
2017-07-06 19:03:13
阅读次数:
267
锁是给线程用的,线程拿到锁之后才能干活。当多个线程竞争一个锁时,同一个时间只能有一个线程脱颖而出持有锁,其他线程等该线程释放锁后发起下一轮竞争。那么这种竞争就存在公平性问题,如果是公平的竞争,那么这些线程就得有序来依次得到锁,这就需要线程们按先来后到排队,第一个线程使用完后把锁递给第二个线程,以此类 ...
分类:
其他好文 时间:
2017-06-10 22:29:22
阅读次数:
244