- 博客(8)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 多线程总结(四)万字长文,一篇彻底看懂ReentrantLock,AQS的源码
*多线程总结(四)ReentrantLock的源码理解一.前言首先在聊ReentrantLock之前,我们需要知道整个JUC的并发同步的基石,currrent里面所有的共享变量都是由volatile修饰的,我们知道volatile的语义有2大特点,可见性以及防止重排序(内存屏障,volatie写与volatile读)【1、当第二个操作为volatile写操做时,不管第一个操作是什么(普通读写或者volatile读写),都不能进行重排序。这个规则确保volatile写之前的所有操作都不会被重排序到vol
2021-04-04 22:37:18
3794
24
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 大根堆与小根堆的理解,如何手写一个堆,以及什么时候用自己手写的堆,什么时候用语言提供堆的api,(二者的区别)
大根堆与小根堆的理解,如何手写一个堆,以及什么时候用自己手写的堆,什么时候用语言提供堆的api,(二者的区别)定义Heap是一种数据结构具有以下的特点:1)完全二叉树;2)heap中存储的值是偏序;Min-heap: 父节点的值小于或等于子节点的值;Max-heap: 父节点的值大于或等于子节点的值;用通俗语言来说,大根堆就是每个最大的数字在每个子树的最上方,及大根堆pop值为最大值,小根堆反之堆的存储堆的存储一般由数组表示,由于堆的实质就是完全二叉树,所以对于每个i来说(从0开始),左
2021-01-16 21:55:36
3666
11
原创 SpringBoot启动源码详解(一)
SpringBoot启动源码详解(一)【万字长文】1.首先大run!2.new(初始化实例)3.正式开始run4.一步一步来4.1首先进行计时监控4.2 然后进行初始上下文和configureHeadlessProperty4.3.然后来到了我们一个深入点4.4.开始默认初始化参数,--XX JAR这种,本测试为null4.5.根据运行监听器和应用参数来准备spring环境4.5.打印Banner类1.首先大run!main方法作为程序的入口,执行SpringApplication.run(),传入参
2021-11-24 17:25:58
1148
9
原创 多线程总结(五)长文,详解ThreadLocal源码
在并发编程中有一个线程副本的概念,就是ThreadLocal,今天我们就着重来分析一个这个Theadlocal,我们将会从以下五个方面来分析这个问题,数据结构hash算法hash冲突内存泄漏问题set(),get()方法源码详解探测式清理,启发式清理扩容机制数据结构Thread类有一个类型为ThreadLocal.ThreadLocalMap的实例变量threadLocals,也就是说每个线程有一个自己的ThreadLocalMap。每个线程Thread拥有一份自己的副本变量,所以线程
2021-09-02 19:50:10
333
原创 多线程总结(三)Synchronized 关键字的底层实现原理(锁升级概念)以及优化
多线程总结(三)Synchronized 关键字的底层实现原理(锁升级概念)以及优化一,前言前面我们学习了Synchronized 关键字,的用法,学完直接,我们可以来深入了解一下Synchronized的实现原理以及优化二,实现原理首先我们要知道对象锁(monitor)机制Synchronized不论是修饰方法还是代码块,都是通过持有修饰对象的锁来实现同步,那么Synchronized锁对象是存在哪里?首先涉及一点jvm的知识(jvm我也还没有复习),可能解释的不是特别好,我们知道new出来的
2021-03-28 22:39:13
685
原创 多线程总结(二)Synchronized 关键字的使用与用法
多线程总结(二)Synchronized 关键字的使用与用法一,为什么时候Synchronized前面文章说了线程不安全的问题,在共享资源的时候需要上锁来避免线程不安全,erqsynchronized可以保证一个线程的变化可见(可见性),即可以代替volatile。二.Synchronized的使用常见有三种用法Java中每一个对象都可以作为锁,这是synchronized实现同步的基础:1.普通同步方法(实例方法),锁是当前实例对象 ,进入同步代码前要获得当前实例的锁2.静态同步方法,锁是
2021-03-25 22:15:55
583
1
原创 多线程总结(一)-概念,场景,创建,使用,基本方法,基本状态,线程不安全的原理,以及关键字 Synchronized 的使用
多线程总结(一)-概念,场景,创建,使用,基本方法,基本状态,线程不安全的原理,以及关键字 Synchronized 的使用一.概念(场景)首先我们在学习程序与进程的时候知道,最小的执行单位是线程。个人认为多线程理解的最好概念就是,一个线程就是一个执行路径(path),多个线程就是多个路径。举个最简单的也最ok的例子,电影院买票,100张票,如果只有一个执行路径(一个买票窗口)那么会非常慢,这时候可以使用多个执行路径(多个线程也就是多个买票窗口),来提高电影院的工作的效率二.线程的创建线程的创建
2021-03-25 21:56:43
542
5
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人