自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 优秀博客合集

以下是我收集一些个人觉得比较好的博客,方便温故而知新文章目录JavaLinuxSpringRedisJavaLinux用户态和内核态的理解和区别SpringRedis分布式锁的实现之 redis 篇Redis分布式锁(二):支持锁的续期,避免锁超时后导致多个线程获得锁...

2020-09-20 19:29:41 195

原创 Java 多线程--ReentrantLock & AQS源码分析

文章目录1.ReentranLock源码分析构造函数lockunlock方法调用链2.AQS常见套路3.自定义一次性闸门4.ReentranLock跟Synchronized的相同点和不同点5.ReentrantReadWriteLock 读写锁写锁加锁读锁加锁1.ReentranLock源码分析因为ReentranLock里面的sync是基于AQS(AbstractQueuedSynchronizer),并且AQS采用了模板方法的设计模式,因此,诸如semephore、countdownlatch、c

2020-09-22 15:48:07 138

原创 Java 多线程--ThreadLocal基于源码流程分析

文章目录一、ThreadLocal作用与数据结构作用用线程隔离的思想做到线程安全线程内需要保持全局变量数据结构二、内存泄露问题吗?三、set源码讲解Hash计算replaceStaleEntry探测式清理--expungeStaleEntry启发式清理--cleanSomeSlots扩容前的准备四、get()源码详解五、ThreadLocal的实际使用场景在Spring中的应用参考一、ThreadLocal作用与数据结构ThreadLocal简称人手一支笔,可以在自己的线程保存一份变量,每个线程Thre

2020-09-19 16:42:43 163

原创 Java 多线程--线程池详解

文章目录一、概述以及大体框架二、ThreadPoolExecutor参数分析阿里推荐使用ThreadPoolExecutor三、线程池运行流程四、线程池的一些常用方法Runnable 与 Callable回顾下线程创建的几种方法execute() 与 submit()停止线程的几种方法五、如何设置线程数量CPU密集型(N+1)I/O密集型(2N)六、为什么线程池里面的线程能够进行复用七、线程池的状态参考一、概述以及大体框架为什么需要线程池?池化技术?因为如果每来一个任务,都创建的线程、执行任务、线程,

2020-09-18 17:42:58 178

原创 设计模式--单例最终篇

文章目录1.前言1.1 类加载机制1.2 对象的创建2.饿汉式3.Double Check4.静态内部类5.枚举实现单例枚举类如何做到线程安全?枚举类如何破坏反射机制枚举如何破坏序列化和反序列化1.前言单例模式一直有很多种,什么饿汉式懒汉式啥的,还有线程安全线程不安全,本文结合我自己的理解,把我认为的单例写法都说一遍,并解释为什么要这么写。想写好单例,细节点其实很重要。大家先回顾下很重要的基础知识。1.1 类加载机制类的加载过程主要分为五步:加载、连接(验证、准备、解析)、初始化加载:通过类

2020-09-13 17:43:57 173

原创 Java 多线程--volatile详解

文章目录一、volatile简述二、volatile如何解决可见性问题缓存一致性协议总线嗅探总线风暴happens-before 语义三、volatile如何禁止指令重排序内存屏障as-if-serial 语义四、volatile不能解决原子性问题五、用volatile实现单例模式七、总结八、参考资料一、volatile简述volatile是JMM的一种具体实现方式,是一种轻量级的synchronized,用于修饰共享变量,在多线程环境下能够保证原子性、可见性、有序性。二、volatile如何解决可见

2020-09-03 21:59:55 356

原创 Java 多线程--内存模型(JMM)

文章目录一、为什么要有内存模型二、什么是Java内存模型JMM定义的规范是什么样的三、Java内存模型的具体实现一、为什么要有内存模型计算机在执行程序的时候,每条指令都是在CPU中执行的,而计算机的数据是存储在内存当中的,因此CPU在执行的过程中会不断读取在内存当中的数据。但是随着硬件的发展,CPU的速度越来越快,但是内存的速度没有发生太大的改变所以CPU在执行程序的时候,很大一部分的时候都在等候内存中的数据。为了减少CPU等待内存中的数据,引入了高速缓存的概念。程序在运行的过程中,会将需要运到

2020-09-03 21:48:29 145

原创 Java 集合--HashMap 全攻略

文章目录0.HashMap的概述1.HashMap的数据结构为什么需要链表数据结构JDK7是什么插入法,而JDK8呢为什么HashMap的扩容大小要求是2的幂?& 比 % 运算效率高均匀分布如果自定义设置的值不是2的幂2.HashMap 插入 和 扩容 源码插入扩容初始化扩容正常扩容参考资料0.HashMap的概述HashMap是平常编程中使用的最多的一种数据结构,是Map下的一个具体实现类,Map下还有TreeMap、LinkedHashMap,这些就放到另外一篇文章讲了。1.HashMap

2020-09-03 20:35:44 124

原创 Java--ConcurrentHashMap & HashTable 详解

一、HashTableHashTable是线程安全的HashMap,里面的方法都是用synchronized修饰过的,跟HashMap有以下不同之处:初始容量不同,HashMap是16,HashTable是11HashMap可以存储值为null的元素,而HashTable不可以HashMap的迭代器是基于快速失败(modCount)机制,fail-fast,而HashTable的迭代器不是快速失败的。二、Colletions.synchronizedMap除HashTable外,利用Coll

2020-09-03 20:28:02 367

原创 Java--ArrrayList 全攻略

1.ArrayList 类图实现了Collection接口实现了List接口,是List实现类之一实现了Iterable,可以for-each迭代实现了RandomAccess接口,可以随机访问实现了Cloneable,可以克隆实现了Serializable,可以序列化2.相关简述ArrayList 实现了List接口,是List的一个具体实现类,底层结构是可变数组,在使用无参构造方法初始化ArrayList时,默认容量为10,扩容倍数为1.5。ArrayList实现了RandomAc

2020-09-03 20:27:16 742

原创 Java--容器概述

一、容器概述容器主要分为Collection和Map两种,Collection是对象的集合,而Map是存储着键值对(两个对象)的映射表。CollectionCollection是对象的集合,继承了Iterable。说明Collection支持快速失败机制(fail - fast),涉及到modifyconcurrentException这个经典的异常。1.ListArrayList:底层基于动态数组实现,支持随机访问。LinkedList:底层基于双向链表实现。一般可以用作双向队列Vec

2020-09-03 20:26:17 102

原创 新的开始

过去今天是2020年9月1号。五年前的今天,是高三开学的日子。四年前的今天,是准备踏上大学的日子。2020年的9月1号,是我大学毕业之后来北京的第二个月。心有不甘,不想将就。现在之前也一直有写自己的笔记,因此我会把这些笔记逐渐分享出来,一是希望能够跟大家互相交流,大家也可以指正我文章中的错误。二也是自己知识的一部分总结,也表明自己想转回后端方向的决心。未来我的网名一直都叫Dopezhi,是因为我一直以来都喜欢听电子音乐,LOL里面VN的代表音乐Ascension就是我的最爱,因此把名字取成

2020-09-03 20:25:31 84

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除