
JDK源码学习
seasonLai
站在巨人的肩膀上,粘贴复制...
github: https://github.com/seasonlai
展开
-
ReentrantLock笔记(一) -- 基本使用
ReentranLock基本使用交替输出ReentrantLock lock = new ReentrantLock(true);//true为公平锁,false或缺省为非公平锁Runnable r = () -> { while (!Thread.currentThread().isInterrupted()) { lock.lock(); ...原创 2018-09-07 19:39:29 · 515 阅读 · 0 评论 -
HashMap的红黑树实现源码分析
PS: 最近看了jdk的TreeMap、HashMap的红黑树代码,就动手用java实现了二叉树的数据结构,代码有注释,下载地址:红黑树、二叉平衡树、二叉排序树的java实现效果大致如下:相关文章:HashMap源码分析一、链表转红黑树HashMap有两个成员变量TREEIFY_THRESHOLD、MIN_TREEIFY_CAPACITY。当链表长度达到TREEIFY_THRE...原创 2018-11-29 11:52:30 · 1264 阅读 · 0 评论 -
ConcurrentHashMap源码分析
public class ConcurrentHashMap<K,V> extends AbstractMap<K,V> implements ConcurrentMap<K,V>, Serializable {一些成员变量//扩容的最大容量限制private static final int MAX原创 2018-11-22 19:57:00 · 260 阅读 · 0 评论 -
LinkedHashMap源码分析及实现LRU算法
PS: 要先了解HashMap的实现原理HashMap源码分析一、简单介绍public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>原创 2018-11-16 21:27:17 · 249 阅读 · 0 评论 -
ReentrantReadWriteLock笔记(四) -- ReadLock源码分析
看看ReentrantReadWriteLock怎么实现readLock方法的public ReentrantReadWriteLock.ReadLock readLock() { return readerLock; }readerLock是一个成员变量,在构造方法里被初始化private final ReentrantReadWriteLock.ReadLock reade...原创 2018-09-09 19:07:00 · 174 阅读 · 0 评论 -
ReentrantReadWriteLock笔记(三) -- WriteLock源码分析
先看一下ReentrantReadWriteLock的继承图ReadWriteLock接口很简单,就两个方法,就是返回读锁、写锁的方法public interface ReadWriteLock { Lock readLock(); Lock writeLock();}可以发现它没有继承Lock接口,再想想平常使用是lock.writeLock().lock(...原创 2018-09-09 16:02:43 · 294 阅读 · 0 评论 -
ReentrantReadWriteLock笔记(二) -- Sync源码分析
ReentrantReadWriteLock中的内部类Sync很重要,因为主要的实现逻辑就在它里面,看一下它比较重要的成员abstract static class Sync extends AbstractQueuedSynchronizer { ...省略 //共享资源数的位数 static final int SHARED_SHIFT = 16; ...原创 2018-09-09 15:55:57 · 193 阅读 · 0 评论 -
ReentrantReadWriteLock笔记(一) -- 基本使用
先定义三个Runnable//读操作 Runnable readTask = () -> { lock.readLock().lock(); try { System.out.println(Thread.currentThread().getName() + "获得读锁,开始读操作"); try { ...原创 2018-09-09 15:51:52 · 183 阅读 · 0 评论 -
ReentrantLock笔记(三) -- ConditionObject源码分析
ConditionObject源码分析平时用ReentrantLock的时候,会用lock.newCondition()来创建一个条件,跟踪进去 public Condition newCondition() { return sync.newCondition(); } //Sync中的newCondition方法 final Cond...原创 2018-09-08 13:24:23 · 350 阅读 · 0 评论 -
HashMap源码分析
Hashtable:Hashtable是遗留类,很多映射的常用功能与HashMap类似,不同的是它承自Dictionary类,并且是线程安全的,任一时间只有一个线程能写Hashtable,并发性不如ConcurrentHashMap,因为ConcurrentHashMap引入了乐观锁(JDK1.7是分段锁)。Hashtable不建议在新代码中使用,不需要线程安全的场合可以用HashMap替换...原创 2018-09-11 15:57:11 · 225 阅读 · 0 评论 -
ThreadPoolExecutor源码分析 -- execute、shutdown方法
来个简单的例子ThreadPoolExecutor executor = new ThreadPoolExecutor(2, 10,100, TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(10)); executor.execute(() -> { System.out.println("h...原创 2018-09-11 13:12:35 · 1434 阅读 · 0 评论 -
ReentrantLock笔记(二) -- 公平/非公平锁源码分析
ReentrantLock的公平/非公平锁实现 最好事先了解下CLH队列锁,也要知道CAS,再了解下LockSupport(比wait,notify好用) 参考: JAVA并发编程学习笔记之CLH队列锁相关文章:ReentranLock笔记(一) – 基本使用一、先分析 非公平锁(NonfairSync)看一下AbstractQueuedSynchronizer类中...原创 2018-09-07 20:00:47 · 220 阅读 · 0 评论 -
ThreadLocal用法及原理
与Synchonized的对照:ThreadLocal和Synchonized都用于解决多线程并发訪问。可是ThreadLocal与synchronized有本质的差别。synchronized是利用锁的机制,使变量或代码块在某一时该仅仅能被一个线程訪问。而ThreadLocal为每个线程都提供了变量的副本,使得每个线程在某一时间訪问到的并非同一个对象,这样就隔离了多个线程对数据的数据共享。而...原创 2019-03-22 15:03:15 · 243 阅读 · 0 评论