JDK源码
文章平均质量分 57
Coffey强
雄关漫道真如铁,而今迈步从头越
展开
-
什么叫可重入锁
可重入锁,指的是以线程为单位,当一个线程获取对象锁之后,这个线程可以再次获取本对象上的锁,而其他的线程是不可以的。synchronized 和 ReentrantLock 都是可重入锁。可重入锁的意义之一在于防止死锁。废话不多说 直接上源码调试不知道怎么调试源码的看我之前发的文章先上下代码哈,注:这篇文章重点讲解锁的重入,有时间再讲AQS个ReentrantLock,先用ReentrantLock为例,他内部维护了一个Sync类 这个Sync又有一个state的变量 这就是可重入的关键进原创 2021-07-08 20:44:47 · 15901 阅读 · 3 评论 -
ArrayBlockingQueue与LinkedBlockingQueue
BlockingQueue阻塞队列 先把这个接口的几个方法介绍下public interface BlockingQueue<E> extends Queue<E> { //将指定的元素插入到此队列的尾部(如果立即可行且不会超过该队列的容量) //在成功时返回 true,如果此队列已满,则抛IllegalStateException。 boolean add(E e); //将指定的元素插入到此队列的尾部(如果立即可行且不会超过该队列的容量) // 将指定的原创 2021-07-08 19:45:55 · 281 阅读 · 0 评论 -
JDK之HashMap二
上一期讲到用户自定义的不够散列的哈希code可能会导致哈希碰撞,进而引起由链表转化成红黑树的过程今天带大家实地的去看一下这个事情首先得需要调试JDK首先IDEA 默认调试的是下图这两个zip包我们需要改一下这里,把这两个文件复制,解压然后打开IDEA project Structure->Sdks->Sourcepath选项卡删除掉原有的 也就是jdk下的两个zip包 换成解压的文件夹此外 还要把file->setting->build,execution,depl原创 2021-07-02 11:58:01 · 100 阅读 · 2 评论 -
JDK之HashMap
从面试题理解HashMapHashMap面试题1.jdk1.8 HashMap采用了怎样的储存方式:数组加链表加红黑树2.什么时候使用链表 什么时候使用红黑树:链表长度大于8转红黑树 小于6 变回链表3.长度大于8一定会转成红黑树么:答案是不一定 需要看源码 要满足两个条件 一个是大于8 还要一个是数组的长度大于64 如果数组的长度小于64 则执行resize()进行扩容4.如果两个键的hashcode相同,如何存储键值对答案如下图比如说我们的hashmap只存16个数组 他的hash运算是对原创 2021-06-30 12:51:27 · 164 阅读 · 1 评论 -
JDK源码随笔之LinkedHashMap及LRU算法
HashMap的诞生解决了搜索的时间复杂度,但同时 对于有序的场景 就需要用到LinkedHashMap。TreeMap :按照 key 的顺序LinkedHashMap :按照 key 的插入和访问的顺序也是LinkedHashMap按照key插入的顺序访问方式,可以实现LRU(最近最少使用)算法先来看类图,如下下面是linkHashMap中的一个子类Entry 我们可以看到他有前节点后节点两个属性, static class Entry<K,V> extends HashMa原创 2021-04-20 09:36:50 · 171 阅读 · 0 评论 -
JDK源码随笔之AtomicInteger
AtomicInteger:意为原子操作的Integer类,这里可能有朋友要问了,加上synchronized关键字不就可以了实现了么,为什么单独做了一些原子操作类呢,这是因为在实际开发当中,对并发不高且操作简单的类如Integer,synchronized关键字显得很繁重,下面我们来看看AtomicInteger是怎么实现原子操作的。首先讲下什么是原子操作:原子操作意为一系列的动作过后,要么都成功,要么都不成功,举例:小明给小张转100元, 操作分解为小明账号扣除100 ||小张账号增加100,这一系列原创 2021-04-12 16:32:41 · 191 阅读 · 3 评论