
Java
文章平均质量分 95
nimo10050
这个作者很懒,什么都没留下…
展开
-
ConcurrentHashMap 源码分析 - JDK1.7
声明本文对 java.util.concurrent.ConcurrentHashMap的相关讨论全部基于 JDK1.7 源码, 另外, 在阅读本文前,需要读者对 java.util.HashMap有一定程度的了解, 比如基于 K-V 存储, 底层数据结构(jdk1.7/jdk1.8)等.正文阅读大纲ConcurrentHashMap 的相关介绍ConcurrentHashMap 的构造函数ConcurrentHashMap 的 put 方法ConcurrentHashMap原创 2021-03-12 16:31:30 · 167 阅读 · 0 评论 -
ThreadPoolExecutor 源码分析 - execute() 方法
知识回顾线程池的几种状态 RUNNING 、SHUTDOWN 等线程池的核心参数 corePoolSize 和 maximumPoolSize 等线程池的工作原理 核心线程 -> 阻塞队列 -> 非核心线程 -> 拒绝策略如何判断线程池的状态和线程数量:通过 AtomicInteger ctl 变量的高低位判断Worker 对象的介绍(对一个线程任务的包装)ThreadPoolExecutor#workers 属性线程池中有一个 workers 集合,里面记录了所有的工作原创 2020-05-14 22:51:49 · 757 阅读 · 0 评论 -
线程池 ThreadPoolExecutor 源码分析基础 - 线程池工作原理
前言本文主要内容为分析 ThreadPoolExecutor 线程池的执行原理,然后这前后会穿插一些其他线程池的内容(构造方法,线程池状态等等),本文最终目的是为分析 ThreadPoolExecutor 源码打基础。阅读前请对线程池的概念及作用有所了解。另外,本文主要内容基于 jdk1.8 来说明。正文大纲线程池的构造方法线程池的创建方式线程池的工作状态线程池的工作原理线程池 Worker 内部类ThreadPoolExecutor 的构造方法ThreadPoolExecut原创 2020-05-09 18:34:24 · 386 阅读 · 0 评论 -
Java 线程池 ThreadPoolExecutor 中的位运算操作
前言翻阅 Java 线程池的源码,可以看到用到了大量的位运算操作,本文来分析下这些位运算是如何计算的,以及最后算出的结果是什么。正文阅读之前,必须熟悉一下内容& 与运算| 或运算~ 取反<< 左移负数的二进制表示方式(先取对应 正数 的二进制,然后对每一位 取反,最后加 1)java 中 位运算的优先级(取反 优先级大于 与运算)ThreadPoolE...原创 2020-04-29 11:33:50 · 1562 阅读 · 1 评论 -
ReentrantLock 源码分析 - 公平锁的 lock() 方法实现
前言上一篇文章 ReentrantLock 源码分析 - 非公平锁 lock()方法 分析了 非公平锁 的实现方式。本文接着介绍 公平锁 的具体实现,什么是公平锁和非公平锁请参考 ReentrantLock 源码分析 - 并发编程小知识正文AQS 知识回顾AQS 是一个双向队列,从队列中的第二个节点开始,节点中的线程才可以参与锁竞争,第一个节点被称为“虚节点” 或者 “哨兵节点”。...原创 2020-04-28 11:46:52 · 262 阅读 · 0 评论 -
ReentrantLock 源码分析 - 非公平锁 lock()方法
前言前面用了 4 篇文章为本文分析 ReentrantLock 源码做了一些铺垫,ReentrantLock 源码分析 - 并发小知识ReentrantLock 源码分析 - 并发基础类ReentrantLock 源码分析 - AbstractQueuedSynchronizer 详解(一)ReentrantLock 源码分析 - AbstractQueuedSynchronizer 详...原创 2020-04-27 21:02:25 · 180 阅读 · 0 评论 -
ReentrantLock 源码分析 - AbstractQueuedSynchronizer 详解(二)
前言在上一篇 ReentrantLock 源码分析 - AbstractQueuedSynchronizer 详解(一) 是这样总结 AQS 的 acquire(int arg) 方法的:如果当前线程获取失败,就把它放入到 AQS 队列当中, 顺便挂起当前线程这种说法显然比较粗, 实际上acquire(int arg) 内部还有很多细节,本文继续来进行探讨。正文整体思路如下:先来...原创 2020-04-27 19:28:56 · 223 阅读 · 0 评论 -
ReentrantLock 源码分析 - 并发小知识
前言接下来会出一系列文章来分析 ReentrantLock 的源码, 在此之前需要具备很多基础, 因为说到 A 知识点可能牵扯出 B 知识点, 又扯出 C 知识点, 一环扣一环, 本文先从最基础的开始了解。正文先来看一些并发相关的小知识原子性原子性操作是指执行一系列操作时, 要么全部执行, 要么全部不执行。类似数据库事务的原子性。CAS 操作CAS 全称是 Compare And...原创 2020-04-26 21:44:09 · 163 阅读 · 0 评论 -
ReentrantLock 源码分析 - AbstractQueuedSynchronizer 详解(一)
前言上一篇文章 ReentrantLock 源码分析 - 基础篇 对 AbstractQueuedSynchronizer(简称: AQS) 的相关概念和作用作了简单介绍, 有了初步的印象, 本文将会对 AQS 进行详细介绍 (基于 jdk1.8)。阅读之前请了解 共享锁 和 独占锁 的概念. 另外上一篇有提到 ReentranLock是独占锁, 而共享锁中有 ReentrantReadW...原创 2020-04-26 00:28:02 · 220 阅读 · 0 评论 -
ReentrantLock 源码分析 - 并发基础类
前言接下来会用 2 篇文章来分析 ReentrantLock的源码,本文先来打点基础。阅读本文之前需具备以下条件:原子性的概念什么是 native 方法CAS 的概念ReentrantLock是独占锁且可重入ReentrantLock既可以是非公平锁,也可以是公平锁正文分析 ReentrantLock之前,需要简单了解以下三个类:sun.misc.Unsafejava....原创 2020-04-24 19:22:01 · 203 阅读 · 0 评论 -
jdk1.8 中 HashMap 的 hash 算法和数组寻址
开篇本文基于 jdk1.8 讲述 HashMap 的 hash 算法,但是不会详细介绍其他相关内容(比如用法,底层数据结构)。所以必须事先知晓下面几点:HashMap 的底层数据结构是数组,在数组的基础上再去考虑链表或者红黑树put 一个 key-value 时,会先计算出在数组中的索引位置,再考虑剩下的步骤位运算操作(异或,与)java 运算符优先级正文HashMap 是基于 ...原创 2020-03-24 21:45:41 · 1795 阅读 · 0 评论 -
基于 Java 实现最初级版的 RPC
开篇本文会通过 Java 实现一个简单的 rpc 框架,rpc 的概念在此不多赘述。相信看完整个实现过程,会对 rpc 的实现原理有更清晰的,更直观的认识。目标实现一个类似 Dubbo 的官方 Demo ,先来看几段代码:定义一个服务接口类public interface HelloService { public void sayHello(String name);}...原创 2020-03-21 04:45:38 · 244 阅读 · 0 评论 -
浅谈 JVM 类加载机制
开篇本文是对过往笔记的一些整理,如有不对,欢迎指导。Java 代码如何跑起来的我们平时写的代码都是以 .java 为后缀结尾的文件。而我们部署应用时,要么是打成 jar 包, 通过java -jar的命令运行;要么打成 war 包, 直接丢到 tomcat 等 web 容器中,然后启动 web 容器。这样我们的 Java 应用就算是跑起来了。那么从打包-> 运行这中间到底发生了什...原创 2020-03-09 22:41:53 · 222 阅读 · 0 评论 -
Java 多线程核心知识点整理
开篇本文内容是综合各种资料(博客+视频+书籍)整理而来。具体链接没有记录,望见谅!正文在学习多线程知识时,除了线程定义及使用方法之外,我们经常会了解到以下概念:进程与线程时间片CPU 执行权上线文切换并发 和 并行守护线程等等如果没有计算机基础,上面很多概念一时半会儿无法理解的。下面就针对这些知识点来一一说明下。进程与线程的关系举个例子,当我们启动 Java 中的 m...原创 2020-02-28 15:52:28 · 255 阅读 · 0 评论 -
循序渐进分析源码 - HashMap put 方法的执行流程(jdk 1.7 )
开篇本篇博客主要分析 jdk1.7 中的 HashMap 的 put() 方法。接下来是几点说明:通过画流程图的方式分析方法的执行流程,不会细致到具体每个方法,比如 hash 算法。不讲 HashMap 的相关概念以及使用方法, 可能只会提一下。文章贴出的代码注释很重要。具体细节之后会慢慢补充, 循序渐进。进入正题预备知识jdk1.7 中 HashMap 采用的是数组 + 链...原创 2020-02-01 19:50:18 · 568 阅读 · 0 评论 -
通过反编译 Java 代码剖析 String
开篇为了挖掘 String 的小秘密, 我们先引入一个 Java 命令 javap关于 javapjavap 是 JDK 自带的反汇编器,可以查看java编译器为我们生成的字节码。通过它,我们可以对照源代码和字节码,从而了解很多编译器内部的工作。常用命令选项: -c 输出类中各方法的未解析的代码,即构成 Java 字节码的指令。javap 能做些什么 ?先来看一段简...原创 2020-02-01 19:44:54 · 399 阅读 · 0 评论 -
Java 使用 commons-net 包实现 FTP 服务器的文件上传和下载
前言由于业务需求,需要实现 ftp server 的文件上传和下载功能。于是便借助了 apache 的一个工具包 commons-net。使用起来很简单,但是有些细节比较坑,特此说明一下。使用第三方包的核心工具类是 FTPClient ,不管是文件上传还是文件下载,都要进行连接和登录,具体会在代码中体现出来。准备工作引入 maven 依赖<dependency> &...原创 2020-02-01 19:40:06 · 1318 阅读 · 0 评论 -
使用 Apache 的 commons-csv 实现 CSV 文件导出
1. CSV 简介CSV全称是:Comma Separated Values (逗号分隔值)或者 Character Separated Values(字符分隔值)。其文件以纯文本形式存储表格数据(数字和文本)。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。每一行记录位于一个单独的行上,用回车换行符CRLF(...原创 2020-02-01 19:37:19 · 3825 阅读 · 0 评论