随笔分类 -  jdk源码

摘要:推荐文章: java7/8中的hashmap跟currentHashMap 关于RESIZE_STAMP_BITS字段的一些解释 扩容图解 网上的文章,jdk7版本的比较多,由于自己本地是jdk8,所以还是整理jdk8的逻辑吧。 一、结构跟思路说明,主要字段解释 HashMap的源码我们比较清楚,大 阅读全文
posted @ 2018-12-09 22:29 facelessvoidwang 阅读(288) 评论(0) 推荐(0)
摘要:condition是对线程进行控制管理的接口,具体实现是AQS的一个内部类ConditionObject,主要功能是控制线程的启/停(这么说并不严格,还要有锁的竞争排队)。 condition主要方法: void await() throws InterruptedException 进入等待,直到 阅读全文
posted @ 2018-11-04 21:26 facelessvoidwang 阅读(2756) 评论(0) 推荐(2)
摘要:读写锁,对于读操作来说是共享锁,对于写操作来说是排他锁,两种操作都可重入的一种锁。底层也是用AQS来实现的,我们来看一下它的结构跟代码: 读写锁,当然要区分读跟写两种操作,因此其内部有ReadLock跟WriteLock两种具体实现。但两者也有交互的地方,比如获取写锁要判断当前是否有线程在读,有的话 阅读全文
posted @ 2018-11-04 21:13 facelessvoidwang 阅读(295) 评论(0) 推荐(0)
摘要:读写锁,对于读操作来说是共享锁,对于写操作来说是排他锁,两种操作都可重入的一种锁。底层也是用AQS来实现的,我们来看一下它的结构跟代码: 读写锁,当然要区分读跟写两种操作,因此其内部有ReadLock跟WriteLock两种具体实现。但两者也有交互的地方,比如获取写锁要判断当前是否有线程在读,有的话 阅读全文
posted @ 2018-11-01 07:41 facelessvoidwang 阅读(387) 评论(0) 推荐(0)
摘要:参考文章:https://www.cnblogs.com/charlesblc/p/5994162.html 刚开始认识volatile的时候,觉得对它的一些特性非常迷惑。比如:具有可见性,如果一个线程修改了volatile变量的值,那么其它线程也会发现这一点;同时它又不具有原子性,多个线程对被vo 阅读全文
posted @ 2018-10-28 11:08 facelessvoidwang 阅读(2856) 评论(0) 推荐(2)
摘要:本部分主要参考《java并发编程艺术》一书相关内容,同时参考https://blog.csdn.net/zhilinboke/article/details/83104597,说的非常形象。 重入锁就是支持重入的锁,它表示该锁支持一个线程对资源的重复加锁。比如之前的在读AQS时的Mutex,在loc 阅读全文
posted @ 2018-10-26 10:04 facelessvoidwang 阅读(476) 评论(0) 推荐(0)
摘要:接下来从实现角度来分析同步器是如何完成线程同步的。主要包括:同步队列、独占式同步状态获取与释放、共享式同步状态获取与释放以及超时获取同步状态等。 1、同步队列 同步器依赖内部的一个同步队列来完成同步状态的管理。当线程获取同步状态失败时,会被加入到队列中,并同时阻塞线程。当同步状态释放时,会把首节点中 阅读全文
posted @ 2018-10-25 10:22 facelessvoidwang 阅读(1835) 评论(0) 推荐(0)
摘要:AQS是用来构建锁或者其它同步组件的基础框架,它使用一个int变量来表示同步状态,通过内置的FIFO队列来完成获取线程的排队工作,concurrent包的作者Doug Lea期望它能称为实现大部分同步需求的基础。 同步器的使用方式是继承,子类通过继承AQS并实现它的相关方法来管理同步状态,在子类方法 阅读全文
posted @ 2018-10-16 21:11 facelessvoidwang 阅读(156) 评论(0) 推荐(0)
摘要:文章前半部分转自:https://blog.csdn.net/lh513828570/article/details/56673804 之前的时候看集合部分源码没看完,今天又翻了一下,看到了个东西spliterator,感觉挺陌生。查了一下,网上解读源码的挺多,但没有使用的例子,于是看了下代码,准备 阅读全文
posted @ 2018-07-25 21:25 facelessvoidwang 阅读(32637) 评论(3) 推荐(7)
摘要:HashMap算是日常开发中最长用的类之一了,我们应该了解它的结构跟算法: 参考文章: http://blog.csdn.net/vking_wang/article/details/14166593 https://tech.meituan.com/java-hashmap.html 数据结构中有 阅读全文
posted @ 2017-11-15 23:44 facelessvoidwang 阅读(467) 评论(0) 推荐(0)
摘要:集合算是java中最常用的部分了,阅读该部分jdk代码可以让我们更加清楚的了解其实现原理,在使用时也能心中有数,有利于写出高质量的代码。 ArrayList 底层数组实现,初始长度10,超过长度后的自增实际是数组拷贝,拷贝用的System.copy()调用了本地方法,效率相对较高。 先看new Ar 阅读全文
posted @ 2017-11-09 10:32 facelessvoidwang 阅读(256) 评论(0) 推荐(0)
摘要:我们都知道Integer是int的封装类,提供了一些类型转换等工具方法,有一个-128-127的缓存,而且是final的。 干货: Integer是final 的,因此对Integer的操作返回的都是另一个新对象,而不是修改原来的值。 Integer的值存在value属性中,Integer的hash 阅读全文
posted @ 2017-11-09 10:27 facelessvoidwang 阅读(423) 评论(1) 推荐(0)