java
文章平均质量分 79
java一些基础以及开发中遇到的一些有趣的问题
一白丁
道阻且长,行则将至
展开
-
细品线程池源码(三)
细品线程池源码 三线程池的关闭shutdownshutdownNow继续看下addWorkerFailed,添加池内线程失败后做了哪些处理 private void addWorkerFailed(Worker w) { final ReentrantLock mainLock = this.mainLock; mainLock.lock(); ...原创 2020-04-21 15:21:54 · 165 阅读 · 0 评论 -
细品线程池底层源码(二)
细品线程池底层源码 二前言正文execute线程池的执行方法后话前言书接上文,介绍了线程池的常用变量以及工作的流程和思想,本文将继续介绍线程池的其他方法。正文线程池执行线程有两种方法,调用submit或者execute。先看下submit方法吧。 public <T> Future<T> submit(Callable<T> task) { ...原创 2020-04-21 14:55:32 · 199 阅读 · 0 评论 -
细品线程池底层源码(一)
细品线程池底层源码一前言正文常量定义后话前言作为java程序员,练习时候经常会写到线程,而实际在生产项目中更偏向于使用线程池,所以笔者就研究一下线程池的实现。正文首先看类结构图从最下层的ThreadPoolExecutor类看继续了AbstractExecutorService这个抽象类,而AbstractExecutorService实现了ExecutorService接口。Exec...原创 2020-04-15 17:46:52 · 178 阅读 · 0 评论 -
细品ConcurrentHashMap底层源码(二)
细品ConcurrentHashMap底层源码二前言正文remove后话前言上文中介绍了concurrentHashMap的get与put方法,了解与hashmap的方法中的差异,以及如何确保安全性,本文将看剩下的一些方法。正文先看下扩容方法 private final void transfer(Node<K,V>[] tab, Node<K,V>[] next...原创 2020-04-14 11:49:27 · 245 阅读 · 0 评论 -
细品ConcurrentHashMap底层源码(一)
@TOC前言相信多数读者都知道细品ConcurrentHashMap是一个并发安全的hashmap,其之所确保安全的原理可能就有读者不知,笔者之前也不曾了解,所以趁闲暇时间来学习学习。正文本文是基于jdk1.8进行的学习,对1.7的concurrenthashmap源码不做讨论。get方法 public V get(Object key) { Node<K,V&g...原创 2020-04-10 17:44:27 · 321 阅读 · 0 评论 -
ReentrantLock 细品底层源码
ReentrantLock的基本介绍前言正文常量构造方法前言有不少读者都了解过ConcurrentHashMap是一个线程安全的map,其线程安全的原理是其内部类Segment 继承了ReentrantLock,很多读者也止步于此,并未深入了解过ReentrantLock,笔者曾想深入了解一下ConcurrentHashMap,若想了解其并发安全的原理是无法绕过ReentrantLock,所以...原创 2020-04-08 17:39:27 · 151 阅读 · 0 评论 -
细品 AbstractQueuedSynchronizer 底层源码 (二)
AQS主要模板方法剖析前言正文总结前言上文主要介绍了acquire的方法,本文将继续探讨剩下的一些方法。正文关于acquireInterruptibly 这个方法和acquire代码差异不大,主要在896行多了个中断异常处理,acquire是直接返回中断的状态值 if (shouldParkAfterFailedAcquire(p, node) && ...原创 2020-04-08 15:38:26 · 118 阅读 · 0 评论 -
细品AbstractQueuedSynchronizer底层源码 (一)
AbstractQueuedSynchronizer的基本介绍前言正文原理概览常量概览方法概览后话前言关于AbstractQueuedSynchronizer以下简称AQS是一个线程安全的同步框架,它是lock接口实现的核心思想,大家所了解到ConcurrentHashMap,线程池都依赖于lock,追其根源还是基于AQS的实现。正文原理概览AQS核心思想是,如果被请求的共享资源空闲,那...原创 2020-04-02 16:23:14 · 154 阅读 · 0 评论 -
细品 ThreadLocal 底层源码
细品 ThreadLocal 底层源码前言正文get方法解析set方法解析内存泄漏问题后话前言ThreadLocal 是java.lang下的一个类,虽说在多线程中会用到ThreadLocal,然其并不在java.util.concurrent包下。说明其立意就不是为了解决高并发问题。那TreadLocal类可以做啥,ThreadLocal类可以维护每个线程的私有变量,做到线程变量的隔离,就好...原创 2020-03-31 18:00:58 · 189 阅读 · 0 评论 -
HashMap 细品底层源码 (六)
剖析hashmap的resize扩容方法前言正文resize方法解析remove方法解析后话前言本文应该是hashmap的最后一篇文章,之前研读了hashmap的hash思想,红黑树结构,以及插入遍历等。本文将对剩下的扩容进行解析,若有结余,顺便讲下remove方法,对于了解过插入的读者而言,remove方法阅读起来没有难度。正文简单介绍一下,hashmap的数据结构是数组加链表或者红黑树...原创 2020-03-31 14:52:27 · 121 阅读 · 0 评论 -
HashMap细品底层源码(五)
HashMap中的红黑树运用前言正文后话前言上文中详细介绍了红黑树的数据结构以及插入删除的思想,和普通二叉查询树的差异,本文将介绍红黑树在hashmap中的运用正文在之前所讲到的putVal方法中调用了putTreeVal方法,现在就详细剖析这个方法。 final TreeNode<K,V> putTreeVal(HashMap<K,V> map, Node<...原创 2020-03-30 17:59:53 · 134 阅读 · 0 评论 -
HashMap 细品底层源码(四)
红黑树的介绍前言正文红黑树的基本定义红黑树的插入与删除插入删除后话前言之前曾简单介绍过二叉树的定义以及红黑树的概念,本文将详细展开红黑树的数据结构以及hashMap中的使用。正文红黑树的基本定义先看下红黑树的官方定义:红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。红黑树的特性:节点是红色或黑色根节点是...原创 2020-03-27 18:32:21 · 126 阅读 · 0 评论 -
HashMap 细品底层源码(三)
剖析put方法前言正文后话前言上问中介绍了map的get方法以及hash方法的思想,简单的提及了关于二叉查询树以及红黑树的结构,本文将会介绍hashmap中的put方法。正文先看下源码// 调用hash处理后,调用putval方法 public V put(K key, V value) { return putVal(hash(key), key, value, fa...原创 2020-03-27 11:16:21 · 271 阅读 · 0 评论 -
HashMap 细品底层源码(二)
剖析get方法前言正文后话前言上文中介绍了hashmap的常量参数以及构造方法,这次继续来解析其他方法。正文先看下源码// get方法,调用getNode方法 public V get(Object key) { // 内部类节点e Node<K,V> e; // 调用getNode方法,传入key的hash值以及,key,判断返回的e...原创 2020-03-25 17:21:39 · 147 阅读 · 0 评论 -
HashMap 细品底层源码(一)
常量参数及构造方法剖析前言常量参数概览构造方法概览后话前言作为一名java程序猿,与java都是老伙计了,在运用方面,相信读者都很熟练,然对其原理,有不少读者就很少探究,笔者也看过不少文档和视频,但终究还认为绝知此事要躬行。常量参数概览本文是基于jdk1.8而写的,关于1.7的底层与1.8的差异,笔者简单概述一下,1.8相较于1.7最大的差异,底层的链表超过长度为8的时候,会转换成红黑树。...原创 2020-03-25 15:07:48 · 138 阅读 · 0 评论 -
java 记录一下使用集合中的contains方法遇到的小问题
Long a = 10000L; Long b = 10000L; List<Long> test = new ArrayList<>(); test.add(a); System.out.println(test.contains(b));大家都知道,Long以及Integer 都是有个常量缓存池,为-128...原创 2019-09-04 22:57:11 · 4481 阅读 · 1 评论