jdk
刘二郎
很懒
展开
-
jdk-AbstractQueuedSynchronizer(一)
首先,我的并发知识不是很充足,分析AbstractQueuedSynchronizer源码纯粹是逼着自己去看,自己也并没有读过java 并发编程这本书,虽然这部书在自己的必读书籍队列里,不过我觉得现在实际并不是很成熟,所以先往后推一推了,但是对于jdk的并发包,我还是有点兴趣的,说实话,自己读AbstractQueuedSynchronizer源码时断断续续的,有时候是被打乱,有时候读了几遍还是不原创 2017-05-15 21:58:13 · 264 阅读 · 0 评论 -
jdk-ThreadPoolExecutor(二)---内部参数和拒绝策略
承继上一篇,上一篇主要分析了下ThreadPoolExecutor中的大概执行逻辑,这一篇主要分析一下内部参数的写一写测试程序。首先来看里面的最终的默认构造方法,分析其参数,以及其流程//Executors中的四个构造方法最终调用的是下面一个初始化方法 public ThreadPoolExecutor(int corePoolSize,原创 2017-06-26 09:48:06 · 1069 阅读 · 0 评论 -
jdk-ThreadPoolExecutor(一)---基本变量和大致流程解析
之前测试CountDownLatch时,使用了线程池。ExecutorService service = Executors.newFixedThreadPool(3);service.submit(run);service.shutdown();基于此,今天来看看java给我们提供的线程池有哪些?作为码农,不能以会使用作为终极目标,了解源码觉得很有必要,通过源码,可以原创 2017-06-22 15:36:06 · 322 阅读 · 0 评论 -
jdk-CyclicBarrier(二)
jdk-CyclicBarrier这一篇主要是分析了它 的源码和运行图。这一篇来看看怎么运用,毕竟都是要使用的。上文在分析源码过程中发现有个代数的问题,在nextGeneration中会有下一代的出现,这个是否就是说它是可以重用的?不然哪会来区分一代,二代,三代呢?例子1:次例子中重复使用了CyclicBarrierpublic class TestCycB { priv原创 2017-06-21 14:24:41 · 233 阅读 · 0 评论 -
jdk-HashMap
HashMap是我有意识去研究jdk源码时看的第一个。印象很深刻,当我看过源码之后,突然发现自己对之前很多东西理解突然透彻了,有此感叹。笔者有幸也参与过公司的几次面试(跟着打酱油而已),有时候也有自己提问的时候,很多时候都是问关于HashMap的问题,并发现,其实很多面试者对这方面了解的并不好,基本80%都是在用,但是对于它的机制和处理过程确知之甚少。所以笔者也很纳闷,至少很大一部分人都没有关原创 2017-03-27 21:51:37 · 512 阅读 · 0 评论 -
Object源码分析(一)-- clone方法
java基类Object在你编写一个类的时候,若无指定父类(没有显式extends一个父类)编译器(一般编译器完成该步骤)会默认的添加Object为该类的父类(可以将该类反编译看其字节码,不过貌似Java7自带的反编译javap现在看不到了)。 再说的详细点:假如类A,没有显式继承其他类,编译器会默认添加Object为其父类;若有,那么那个显式父类呢?要么是没有显式继承,那么Objec原创 2017-09-05 21:11:05 · 4718 阅读 · 5 评论 -
jdk-Semaphore
这一篇文章又回到了 JUC 包下了,最近源码读取的也是有点零散,都是想读什么就读什么,也好吧,项目时间也是有点紧,读一点就是一点吧。把我引到读Semaphore上面的一个问题是这样的,如何控制一段方法执行的线程数目,其实可以理解为怎么控制一个方法在同一时刻 最多 只有 num个线程同时访问。构造函数默认使用的是非公平锁,非公平锁的意义在于 当前访问的线程试图获取锁时,不需要关心等待原创 2017-09-25 09:31:43 · 255 阅读 · 0 评论 -
Object源码分析(二)-- hashcode方法
Object内还有一个hashcode方法,留给子类实现的,但是本身Object的hashcode方法也是可以返回一串hash值的,但是是基于C++写的,本人表示看不懂~~。贴几个博客留待研究吧,表示确实不清楚是怎么得到,需要去研究C++去了。暂时读不懂.http://blog.csdn.net/luanlouis/article/details/41547649http://blog.csdn....原创 2017-09-22 11:19:47 · 1782 阅读 · 0 评论 -
ThreadLocal分析--部分源码
今年的个人文章到今天还没有更新,主要前一段时间一直在感冒中,精神状态太差,对着屏幕都提不起精神,浑浑噩噩的。到今天才有所好转对于ThreadLocal来说,个人感觉,在平时的业务代码中,ThreadLocal使用的真是太少了。但是去读过Spring的事务那一块源码的朋友一定记得很深,它的holder就是使用了ThreadLocal来绑定当前线程使用的事务信息。参考博客ThreadLocal源码解读...原创 2018-03-09 14:48:39 · 229 阅读 · 0 评论 -
jdk-HashMap-1.7-补充文章
此篇是关于初期的一篇HashMap文章的补充文章:主要涉及两个东西,一、扩容;二、扩容时的线程安全分析。HashMap1.7在上述篇幅里分析了hash过程,put过程和get过程。应该来说还是比较详细的。一、扩容扩容应该是HashMap内一个非常常见的问题。此篇还是基于1.7去补充下,1.8的稍微复杂了一些是由于引入了红黑树进去。 void addEntry(int hash, K key,...原创 2018-07-09 15:48:01 · 205 阅读 · 0 评论 -
jdk-HashMap-1.8
由于jdk版本的升级导致源码的更新,因此hashmap的源码需要重新读一下,不过在本文记录时jdk的版本早就不是8版本了,只不过是1.7和1.8发生了本质的变化,因此才记录一下的。至于9,10版本,暂时不管了。为了重新去读1.8版本的hashmap源码,特此做了些前期准备:红黑树系列jdk1.7jdk1.7补充文章1.总述关于之前学习的1.7版本,我着重学习了几个点,构造函数(容量大小,加载因子)...原创 2018-07-11 17:14:33 · 239 阅读 · 0 评论 -
jdk-ThreadPoolExecutor(三)---内部Worker和执行方法
第三篇了,其实关于多线程这边的话,我想一直分下去,每一篇都研究一点,不太想将所有的知识点都放在一起,放在一起,读起来太费力了,看起来也不舒服,分下来之后至少一目了然,一个个知识点很清晰。今天的话就来看看它的一个内部类worker,这个worker应该算是核心了。private final class Worker extends AbstractQueuedSynchron原创 2017-06-26 22:22:25 · 961 阅读 · 0 评论 -
jdk-ArrayList
最近项目比较忙,上次分析线程池的时候中断掉了原创 2017-07-25 13:42:47 · 181 阅读 · 0 评论 -
jdk-AbstractQueuedSynchronizer(二)
上一篇分析只是基于AQS本身去分析了一下队列的逻辑,其实也只是分析了独占锁的模式,今天再来看看共享锁的模式是什么样的。共享锁的话可以基于CountDownLatch去分析,CountDownLatch这个是个倒数计数器,其实是一个工具,可将一个任务分解到多线程中分别执行一段。我们就基于此分析一下共享锁。。先上一段CountDownLatch 的例子。可以看见每个线程中都执行了begin.w原创 2017-05-18 14:29:04 · 247 阅读 · 0 评论 -
jdk-AbstractQueuedSynchronizer(三)
分析ReentrantLock的加锁和释放过程。ReentrantLockSyncNonfairSyncFairSyncReentrantLockReentrantLocklocklockInterruptiblytryLocktryLockunlocknewConditiongetHoldCountisHeldByCurrentThreadisLockedisF原创 2017-05-23 14:37:39 · 237 阅读 · 0 评论 -
jdk-AbstractQueuedSynchronizer(四)
第四篇来看看什么呢?来看看写第一篇时就想看的Condition 队列。AQS中维护了两个队列,一个sys等待队列,这个队列是那些想要去获取锁的线程获取不到而进入的一个获取锁的队列,另一个就是Condition条件等待队列。本篇结合是ReentrantLock 去分析这个Condition条件队列。 关于ReentrantLock和Condition结合使用,主要调用的代码是aw原创 2017-05-25 16:17:50 · 197 阅读 · 0 评论 -
jdk-LinkedBlockingQueue
今天来看看啥的?昨天分析到Condition时最终写了个生产者消费者的例子,那么今天来看看生产者和消费者的其他实现方式吧。除了最基本的wait和notify方式,这是基于Object的。我们昨天写了基于lock的await和signal方式,那么今天再看看LinkedBlockingQueue这个基于队列的实现方式。下面是它的成员变量,都很简单,一个Node存储值,其他辅助性道具。不过Li原创 2017-05-26 10:30:58 · 360 阅读 · 0 评论 -
jdk-ConcurrentLinkedQueue(一)
研究完LinkedBlockingQueue之后呢,我的关注点又到了ConcurrentLinkedQueue上,不过说实现的,我的jdk是1.7的,1.7的ConcurrentLinkedQueue的代码简洁是够简洁的,但是读起来费力的要死,逻辑分支理解很僵硬,应该有我的原因,但是我去读过1.6的,1.6的明显在各个分支处的逻辑都很容易理解,在此也要注意一下自己的分支可读性,或许自己的代码过个一原创 2017-05-31 18:33:27 · 356 阅读 · 0 评论 -
jdk-ConcurrentLinkedQueue(二)
第一篇详细画出了在入队和出队时的操作,看的真的很费时,说实话,我看了好几遍才动手开始画队列变换的图,并且在画图时还时不时的修正了很多次。。。总结出,对于jdk源码的话,多看几遍总能看出作者的意图的,不要害怕看不懂,看不懂第一遍,看二遍,三遍。这次的博客去看下此类中的其他一些方法,准备为将来的使用坐下基础。succ方法,向后推进方法,可以看出获取的是当前节点的后继节点,比较了 p 和next原创 2017-06-01 15:49:37 · 242 阅读 · 0 评论 -
jdk-ArrayBlockingQueue
ArrayBlockingQueue其实和LinkedBlockingQueue是有点类似的。只不过一个是基于数组,一个是基于链表。Array中读写使用的是同一把锁,Linked读写使用的是两把分别的锁。 /** The queued items */ final Object[] items; /** items index for next take, poll, p原创 2017-06-06 10:20:23 · 247 阅读 · 0 评论 -
jdk-ConcurrentHashMap(一)
今天参与了一个java的招聘,本人自己的能力其实也一般,但是不巧的是,今天那位同学水平也非常一般,很多问题自己都没去研究过,在问过他平时遇到过什么问题时,这个问题其实很一般,很一般,稍微用点心的,其实都能记住自己遇到的一些麻烦事吧,挑几个来说下就行,或者自己私下准备几个自己能理解的问题,但是他直接回答没什么问题。。。。平时就是一些增删改查啊,没什么很难的问题,说到此,我大概明白了他的日常工作了,基原创 2017-06-19 13:48:51 · 245 阅读 · 0 评论 -
jdk-hashTable
今天光顾一下hashtable吧,其实又了之前hashmap和Concurrenthashmap的源码分析,再看hashtable,就显的简单多了。public Hashtable(int initialCapacity, float loadFactor) { //hashtable中默认值是11,也就是table的大小默认为11 loadFactor依然是0.75f原创 2017-06-20 09:53:22 · 199 阅读 · 0 评论 -
jdk-CyclicBarrier(一)
CyclicBarrier有点类似CountDownLatch,貌似都是个倒数计数器,这里暂且不去管异同点,先把CyclicBarrier分析完,应该就能知道不同了。//标志是否当前代,当前代我是这么理解的,每一次对象的生成就属于一代(个人观点) private static class Generation { boolean broken = false;原创 2017-06-21 08:48:00 · 266 阅读 · 0 评论 -
jdk-HashSet
因为最近去看了下jdk1.8的HashMap,因此我又顺便去学些了下HashSet,平时用的也比较多。用法:当需要存储不能重复的元素时用到的。翻看源码:(有点惊讶)构造函数: /** * Constructs a new, empty set; the backing <tt>HashMap</tt> instance has * default ...原创 2018-07-12 14:31:29 · 134 阅读 · 0 评论