Java
this is a book
一个分享干货的博客
展开
-
bit 位
bit 位原创 2022-07-11 13:51:14 · 943 阅读 · 0 评论 -
ThreadPoolExecutor 源码讲解
ThreadPoolExecutor 源码讲解原创 2022-06-17 09:28:57 · 201 阅读 · 0 评论 -
Java Int 占几个字节
Java Int 占几个字节原创 2022-03-08 09:15:54 · 5119 阅读 · 0 评论 -
Java线程复用原理
待更新原创 2021-11-03 21:01:53 · 113 阅读 · 0 评论 -
Java启动线程的源码讲解
前文铺垫 面向的读者是已经熟练使用过线程池,集成Runnable,直接new Thread 里面编写run方法 虽然方式和种类很多,但是运行到源码层面方式其实只有一种,我们此篇文章就进行讲解Runnable 源码@FunctionalInterfacepublic interface Runnable { /** * When an object implementing interface <code>Runnable</code...原创 2021-11-03 20:58:21 · 136 阅读 · 0 评论 -
ReentrantLock源码讲解
背景原创 2021-10-20 15:41:54 · 76 阅读 · 0 评论 -
Lock源码讲解
1 背景 编程里面锁的定义是为了解决线程安全的问题,加锁,释放锁都是开发人员自行进行管理和控制的,在Java语言针对这样场景定义接口Lock Lock是在JDK1.5出现的,最常见的实现类是ReentrantLock 2 源码讲解 获取锁,如果锁已经被其它线程获取,则进行线程等待void lock(); 释放锁void unlock(); 获取锁,但是相当于lock来说,不会直接进入等待,而是将处理权交给了开发人...原创 2021-10-20 10:02:42 · 165 阅读 · 0 评论 -
Unsafe类
技术定位 CAS的实现都是CPU指令实现的,和Java语言无关,但是和CPU指令交互需要一个类,Java开发者可以调用这个类从而实现调用CPU指令,这个类就是Unsafe.源码讲解 native boolean compareAndSwapInt(Object var1, long var2, int var4, int var5); 首先方法被native修饰,具体实现是jdk自身处理,我们不必关系,重点关心输入 ,输出 输入...原创 2021-10-19 13:28:09 · 67 阅读 · 0 评论 -
CAS讲解
背景 类似i++的操作 无法保证原子性,需要有一个技术栈专门来解决类似问题基本概念 CAS的应为全称是 Compare And Swap ,中文名称是比较交换 CAS最大特点是可以避免使用互斥锁 多个线程在使用CAS更新某一个变量时,只有一个变量会成功,其它线程会被告知失败,所以 CAS一般会和while 循环搭配使用运行原理 CAS的具体实现是CPU指令实现的 由于CP...原创 2021-10-18 15:07:59 · 77 阅读 · 0 评论 -
Java原子类
1 背景 关于原子性的论述请先查看这篇博客进行一下学习,学习以后再进行本章的学习 Java内存模型-原子性_an13654067079的博客-CSDN博客 由于i++这个行为不具备原子性,且存在线程安全,为了解决这类问题研发了原子类2 基础理论 使用CAS来实现 i++ 类似场景的线程安全 3AtomicInteger 重点讲解一下这个类的源码实现 ...原创 2021-10-18 10:45:11 · 57 阅读 · 0 评论 -
Java内存模型-原子性
1 背景 Java内存模型和JVM内存模型是两个概念 Java 内存模型和 Java 的并发编程有关,它的目的是制定一个规范,让Java开发者,编译器工程师和JVM工程师能够达成一致。达成一致以后就可以知道多线程运行的情况下,程序会得到怎么样的情况2 基础理论 java内存模型主要有三方面理论规范,可见性,原子性,指令重排序3 原子性 3.1 原子性的基本概念 原子性在软件行业是通用的一个概念,大致总结就是一组操作要么...原创 2021-10-14 15:43:59 · 235 阅读 · 0 评论 -
Java内存模型-可见性
1 背景 Java内存模型和JVM内存模型是两个概念 Java 内存模型和 Java 的并发编程有关,它的目的是制定一个规范,让Java开发者,编译器工程师和JVM工程师能够达成一致。达成一致以后就可以知道多线程运行的情况下,程序会得到怎么样的情况2 基础理论 java内存模型主要有三方面理论规范,可见性,原子性,指令重排序2.1 可见性 可见性规定了成员变量会存储在主内存里面,当某一个线程在操作的时候会同步一份到自己 线程独占的工作...原创 2021-10-13 10:22:18 · 199 阅读 · 0 评论 -
synchronized详解
1 背景 JDK 1.5 之前共享对象的协调机制只有 synchronized 和 volatile,所以可以说synchronized是JDK最初实现线程安全的关键词,当然了具体怎么实现了线程安全是sun公司的程序员实现的,但是我们仍然需要知道它的实现原理以及演变历史2 版本历史 jdk版本发行时就作为锁的官方实现 jdk 1.6 进行了优化 主要有 自适应的自旋、锁消除、锁粗化、偏向锁、轻量级锁3 核心设计理念 Monitor锁...原创 2021-10-12 14:14:55 · 78 阅读 · 0 评论 -
HashMap源码讲解--数组扩容
1 为什么需要扩容数组的特性是固定长度,但是随着放入的元素增多,数据需要不断改变长度2 源码实现 下面贴的是java中的源码,resize方法,但是resize方法有三种功能 1 当数组为空时 2 数组扩容3 数组为空 HashMap无参构造器的情况下,数组默认是空数组 3.1 第一次初始化长度的时机 调用put方法时,判断数组为空,并且长度为0,则进行初始化数组的长度 if ((tab = t...原创 2016-11-21 09:45:06 · 2231 阅读 · 0 评论 -
HashMap源码讲解一 hash算法
1 什么是hash算法 来自百度百科Hash算法可以将一个数据转换为一个标志,这个标志和源数据的每一个字节都有十分紧密的关系。Hash算法还具有一个特点,就是很难找到逆向规律 个人批语通过hash算法可以把一个数据转换为一个值,这个值暂用很小的空间,但是这个转换是不可逆的2 Java中hash算法的应用java 的 根对象 Object 存在hashCode方法,是native修饰public native int hashCode();个...原创 2016-11-18 09:09:24 · 8737 阅读 · 0 评论