
jdk源码
文章平均质量分 78
laoxilaoxi_
码农,邮箱laoxilaoxi@foxmail.com
展开
-
ReentrantLock学习(二)类整体结构及核心方法时序
一、整体结构ReentrantLock的核心实际为 AbstractOwnableSynchronizer,简称AQSLock:锁接口类,定义了锁的一些基本方法 ReentrantLock:其锁的实现依赖于内部sync Sync:ReentrantLock的内部类,继承了AQS,实现了部分模板方法 NonfairSync:ReentrantLock的内部类,继承了Sync,Reen...原创 2019-08-20 23:07:14 · 265 阅读 · 0 评论 -
ReentrantLock学习(一)ReentrantLock的使用
一、例子一段简单的使用ReentrantLock的例子public class ReentrantLockMain { static String workContent = null; public static void main(String[] args) throws InterruptedException { //new一个锁 ...原创 2019-08-19 22:56:39 · 599 阅读 · 0 评论 -
流资源关闭try-with-resource
一、直接上代码 try-with-resource的写法,jdk1.7新增的 public static void main(String[] args) { //try-with-resource用法 try (FileOutputStream fileOutputStream = new FileOutputStream(“test.txt")){ ...原创 2019-07-15 14:55:15 · 791 阅读 · 0 评论 -
ReentrantLock学习(三)公平锁与非公平锁
一、概念理解公平锁:申请所的时候排队,谁也不插队非公平锁:申请的时候插队(先插队,不行了再排队)二、差别ReentrantLock的公平锁与非公平锁的差别在于,内部的同步器不一样,lock()方法调用的是sync的lock(),分别是FairSync与NonfairSync。sync的lock()内部调用了AQS的acquire,而AQS的acquire做了三件事,第一...原创 2019-08-28 13:43:21 · 380 阅读 · 0 评论 -
ReentrantLock学习(四)lock&unlock过程中sync队列及状态变化
一、AQS中的队列ReentrantLock锁的实现依赖于AQS,而AQS内部实现锁是依赖于volatile int state状态跟volatile Node head,volatile Node tail链表,模型大致如下AQS中的队列status:记录当前锁是否被占用,lock的次数,例如0代表未被占用,2代表lock了2次exclusiveOwne...原创 2019-08-30 12:10:34 · 420 阅读 · 0 评论 -
ReentrantLock学习(五)Condition中await&signal
一、简介ReentrantLock 中ConditionObject内部类,实现了Condition接口,内部维护了一个单向链表(firstWaiter、lastWaiter),而Node中的nextWaiter正是用于该单链表await:释放当前锁持有的锁,生成线程等待node,存储到condition中的单链表中,等被唤醒的时候,在加入到锁的等待队列signal:唤醒cond...原创 2019-09-10 09:35:49 · 2081 阅读 · 0 评论