繁茂_
码龄12年
求更新 关注
提问 私信
  • 博客:12,149
    12,149
    总访问量
  • 42
    原创
  • 30
    粉丝
  • 1
    关注
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:北京市
加入CSDN时间: 2012-12-02
博客简介:

繁茂的博客

博客描述:
Java与大数据成长记
查看详细资料
个人成就
  • 获得9次点赞
  • 内容获得3次评论
  • 获得12次收藏
创作历程
  • 42篇
    2021年
成就勋章
TA的专栏
  • SpringBoot成长记
    1篇
  • JDK成长记
    3篇

TA关注的专栏 0

TA关注的收藏夹 0

TA关注的社区 0

TA参与的活动 0

兴趣领域 设置
  • 大数据
    大数据
  • 最近
  • 文章
  • 专栏
  • 代码仓
  • 资源
  • 收藏
  • 关注/订阅/互动
更多
  • 最近

  • 文章

  • 专栏

  • 代码仓

  • 资源

  • 收藏

  • 关注/订阅/互动

  • 社区

  • 帖子

  • 问答

  • 课程

  • 视频

搜索 取消

JDK成长记21: ReentrantLock (4) 公平、非公平、可重入锁是什么?

经过前面的三节,相信你对ReentrantLock底层的AQS原理已经很清楚了。接下来给大家介绍几个ReentrantLock中的几个概念:公平,非公平锁的概念ReentrantLock是如何实现非公平和公平的?可重入锁又是什么东西?公平锁 Vs 非公平锁 公平锁 Vs 非公平锁当你掌握了ReentrantLock加锁,加锁失败入队,释放锁的原理后。其实在ReenrantLock中还需要搞明白几个概念,比如独占锁、共享锁、可重入锁,公平锁和非公平锁这些都是什么意思。这一小节,我们先来.
原创
发布博客 2021.11.17 ·
383 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

JDK成长记20: ReenranctLock(3)释放锁的AQS底层原理

前两节你应该掌握了ReentrantLock加锁成功和加锁失败入队的核心逻辑,是如何通过AQS中的3个组件做到的。今天来我们看下:ReentrantLock中,当线程释放锁时的逻辑释放锁的过程及源码剖析 释放锁的过程及源码剖析 目前经过线程1、线程2使用ReentrantLock.lock()后的结果如下: 线程2入队等待,线程1持有锁,state=1,owner是线程1,队列中元素是线程2,队列是由Node节点组成的双向链表,头结点为空,队列具体情况如下: 此时假设线程1调用了u.
原创
发布博客 2021.10.29 ·
216 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JDK成长记19:ReenranctLock(2)加锁入队的AQS底层原理

上一节,你应该学到了ReentrantLock底层基于AQS的3个小组件 state、owner、queue。并且了解了下一个线程1进行加锁修改owner和state的过程。还记得么?加锁成功后,如下图所示的状态:首次加锁的时候,只使用到了owner和state这两个小组件,并没有涉及到等待队列。所以这一节,我们继续看一下,如果有下一个线程—线程2,这个哥们过来加锁会是如何的?直接从JDK源码层面理解AQS的另一个线程也来加锁的入队逻辑直接从JDK源码层面理解AQS的另一个线程也来加锁的入队逻辑.
原创
发布博客 2021.10.29 ·
298 阅读 ·
0 点赞 ·
1 评论 ·
0 收藏

JDK成长记18: ReentrantLock (1) 通过首次加锁初识AQS

上一章你应该掌握了Atomic的底层原理-CAS。接下来进入另一个重要的一个知识AQS。我们通过ReentrantLock这个类来讲讲AQS这个知识。从上图可以看出,ReentractLock、ReadWriteReentractLock,这些锁API底层是基于AQS+CAS+volatile来实现的,一般不会直接使用,常使用的是一些并发集合API,但是它们的底层大多还是基于ReentrantLock或者AQS来实现的。ReentrantLock属于java并发包里的底层的API,专门支撑各种jav.
原创
发布博客 2021.10.27 ·
225 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JDK成长记17:Atomic类的原理—CAS+valotile

经过volatile和synchronize关键字的底层原理的洗礼,不知道你是否有一种感觉,要想弄明白它们的原理是一个非常难的过程。为什么费这么大的力气要弄明白这些并发基础知识呢?其实是为了之后更好的掌握并发组件、并发集合这些内容。JDK中的juc(并发包)的知识大体可以分为如下几块:并发基础中除了volatile、synchronied、线程状态变化之外,还有很重要的两个知识CAS和AQS。而其他并发组件和集合都是基于这些知识来实现的工具而已。这一节我们通过Atomic类来学习下它的底层原理,实.
原创
发布博客 2021.10.23 ·
378 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JDK成长记16:从0分析你不知道的synchronized底层原理(下)

上一节你了解了什么是CAS、synchronized形成的锁的类型、重量级锁是用户态进程向内核态申请资源加锁过程,HotSpot Java对象结构,以及初步从3个层面分析了下synchronized的核心流程。还记得核心流程图么?如下所示: 这一节我们仔细来分析下这个过程中,每一步的底层原理。我们需要用到一个工具包,JOL,它可以将java对象的信息打印出来。你可以通过这个工具分析升级过程中锁的标记变化。synchronized锁升级流程详解 synchronized锁升级流.
原创
发布博客 2021.10.22 ·
245 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JDK成长记15:从0分析你不知道的synchronized底层原理(上)

前几节你应该已经了解和掌握了Thread、ThreadLocal、Volatile这几个并发基础知识的底层原理。这一节,你可以跟我一起深入了解下synchronized关键字的底层原理和其涉及的基础知识。看完这篇成长记,你可以获取到如下几点:synchronized预备知识:理解什么是CAS?synchronized会形成几种锁的类型HotspotJVM虚拟机Java对象内存中的布局结构是什么,markword是锁的关键字段?操作系统中用户态和内核态的资源操作和进程是什么意思? synch.
原创
发布博客 2021.10.22 ·
247 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JDK成长记14:(深度好文)你能从3个层面分析volatile底层原理么?(下)

上一节我们基本了解Volatile的作用,从JMM层面简单分析了下volatile可见性的实现要求。发现JMM设定了一些操作要求,在这些要求下,可以保证线程间的可见性。可是具体实现是怎么实现的呢?但是你要想理解这个实现是比较难的,之前提到按照三个层面给大家讲解。如下图所示:其实上一节通过JMM分析volatile是归于JVM层面分析的一部分而已。你要想完全弄清楚volatile的可见性和有序性,你还要继续分析字节码层面的JVM指令标记是什么?Hotspot实现的JSR内存屏障是什么意思?最终实现..
原创
发布博客 2021.10.21 ·
243 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JDK成长记13:(深度好文)你能从3个层面分析volatile底层原理么?(上)

前几节你应该学习到了Thread和ThreadLocal的底层原理,在接下来的几节中,让我们一起来探索volatile底层原理吧!不知道你有没有这样的感受:有很多工程师都很难说清楚volatile这个关键字的作用或者原理。比如有的人压根不知道volatile的作用、应用场景;比如有的人也不知道什么是有序性,可见性,原子性,比如有的人可能能说上来它的作用是什么“保证有序性,可见性,无法保证原子性。”但是大多数人很难说清楚为什么能保证有序性,可见性,不能保证原子性;比如在面试的时候,你经常被面试官问到vol.
原创
发布博客 2021.10.21 ·
197 阅读 ·
0 点赞 ·
1 评论 ·
0 收藏

JDK成长记12:ThreadLocal (下)

上一节你弄懂了ThreadLocal是什么、它的基本使用方式、get方法的底层原理。这一节让继续深入研究下:ThreadLocal的set源码原理JVM的中的强引用、弱引用、软引用、虚引用弱引用在ThreadLocal的应用ThreadLocal内存泄漏问题分析ThreadLocal应用场景举例ThreadLocal set方法源码原理 ThreadLocal set方法源码原理你有了阅读threadLocal的get方法的经验,set方法的源码会变得非常简单。set源码如下所示:.
原创
发布博客 2021.10.21 ·
171 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JDK成长记11:ThreadLocal (上)

上一节你应该学习了thread的基本知识和源码原理,熟悉了线程的应用场景。这一节来学习下和Thread相关的一个类,ThreadLocal。什么是ThreadLocal? 什么是ThreadLocal?字面意思是线程本地变量的意思。用一句话解释就是:线程本地的变量副本,属于每个线程自己独有的。为什么说是变量副本呢?因为每个线程使用ThreadLocal设置自己的值,设置的值互相之间不受影响,但是使用的是同一个ThreadLocal对象。所以设置的每个变量,是给每个线程一个独有的变量副本。你可.
原创
发布博客 2021.10.20 ·
179 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

我的成长记1:手把手教你如何画出令人称赞的图(程序员必读)

画一张好图的意义?作为程序员的你,你经常做的除了起给变量和类起名字、另一就是画图了。抛开起名字这个令人头疼的问题,画图对我们来说是一个表达想法非常不错的方法。因为画图可以清晰的表述你的思维框架,帮你梳理逻辑,更好的传达信息。有的人跟我说画图是一项费时费力的活,的确是这样。但是你要换一个思路想想,为什么会费时费力呢?因为你的大脑在组织你用语言所表达的东西,而且你要思考如何表达才能简单、清晰。如果你只是胡乱涂鸦,那肯定不会费事的,是不是?那么,知道了这一点,其实你会发现,如果你画了几张高质量的图,能清.
原创
发布博客 2021.10.20 ·
189 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

JDK成长记10:Thread的基本原理和常见应用场景,你都知道么?

相信你经过集合篇的成长,已经对JDK源码的学习轻车熟路了。接下来你将一起和我进入后半篇的学习。让我们开始吧! 在接下来10分钟,你将学习到thread 的源码原理、线程的状态变化、线程的常用场景。Thread基础回顾Thread基础回顾什么是Thread?Thread顾名思义,是线程。你应该知道,一个java程序在操作系统上运行,会启动一个JVM进程,具有一个进程ID,这个进程可以创建很多个线程。操作系统、程序、进程、线程关系如下图所示:运行一个线程其实就是启动一个执行分支,执行不同的...
原创
发布博客 2021.10.19 ·
277 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JDK成长记9:集合篇的总结和练习

这一节主要是抛出一些面试题让大家检验一下学习成果,也会小结一下集合篇的知识点。 所以不会特别长。练习-模拟面试 练习-模拟面试先给大家讲一个简单的面试场景快手Java面试一、二面:(一面一般会问一些各种基础,比如集合、并发、锁、JVM、MySql、Redis,IO模型,网络模型等基本原理和知识。二面也会掺杂一些基础,还会有些项目相关、框架的原理,中间件的原理,一些架构和思想,三面也是多方面的,但是基础会少,一般是一些底层原理,系统设计或者架构等)面试官:你好候选人:你好大家寒暄一下…….
原创
发布博客 2021.10.19 ·
145 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JDK成长记8:HashMap的兄弟姐妹们

LinkedHashMap的源码底层原理LinkedHashMap的源码底层原理LinkedHashMap继承自HashMap,但是它的底层增加了一个链表来维护插入或者访问顺序,使得LinkedHashMap变动有顺序性。如下图所示:上图中可以看出,LinkedHashMap继承了HashMap,多了两个成员变量,tail和head指针,还使用Entry内部类继承了HashMap的Node内部类,在原有基础上增加了before和after指针。默认情况下,是按照插入顺序的,也就是put的顺序。.
原创
发布博客 2021.10.18 ·
156 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

JDK成长记7:3张图搞懂HashMap底层原理!

HashMap基本原理和优缺点HashMap基本原理和优缺点一句话讲, HashMap底层数据结构,JDK1.7数组+单向链表、JDK1.8数组+单向链表+红黑树。HashMap的3个底层原理HashMap的3个底层原理在看过了ArrayList、LinkedList的底层源码后,相信你对阅读JDK源码已经轻车熟路了。除了List很多时候你使用最多的还有Map和Set。接下来我将用三张图和你一起来探索下HashMap的底层核心原理到底有哪些?这一节我们就不一步一步带着大家看源码,直接通过3.
原创
发布博客 2021.10.18 ·
240 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

# JDK成长记6:你了解LinkedList的五脏六腑么?

上一节你看过了LinkedList的add方法源码,是不是已经打开了思路呢?其实核心原理就是辅助指针+Node双向链表数据结构而已。相信经过前面的学习,你应该热身完毕了,之后的学习可以让我们可以加快速度了。GO!GO!这一节你还需要深入LinkedList的其他方法探索下它们的底层原理是什么。学完这一节,你可以自己写出一个LinkedList,甚至可以举一反三写出单向链表的List,逆转一个单向链表等等。你也可以攻克很多链表的算法题。面试问到ArrayList和LinkedList的时候,相信你..
原创
发布博客 2021.10.17 ·
133 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JDK成长记5:LinkedList初探

LinkedList初探LinkedList初探作为Java工程师,LinkedList你可能用的不多,大多你总是在new ArrayList。面试很多时候总是拿LinkedList和ArrayList的做对比。总会问你ArrayList 和 LinkedList 的区别是什么?它俩是不是线程安全的?等等。很多时候你的习惯了使用ArrayList,都很少考虑使用LinkedList。你可能都不知道他可以用作内存队列或者栈。再接下来的几节中,你就可以学习到LinkedList的底层各种源码的原理,练..
原创
发布博客 2021.10.17 ·
186 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JDK成长记4:ArrayList常用方法源码探索(下)

写在前面的话写在前面的话有的同学问我,开始讲的很基础,节奏比较慢,这个是因为一个为了让大家慢慢进入状态,后面的节奏会越来越快的,大家不要着急,另一个是因为简单的东西重复,温故而知新,更希望给你们带来的是思想和观念的成长,这个需要铺垫。这个有点像练武功,要想练就高深的武功,需要循序渐进,不然很容易走火入魔的,所以要把根基打扎实,不能着急。这里剧透下,后面会给大家带来一个一个绝世功法:《HDFS成长记》、《ZK成长记》、《Spring Cloud Alibaba成长记》、《Spring Cloud 成长.
原创
发布博客 2021.10.16 ·
188 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

JDK成长记3:ArrayList常用方法源码探索(中)

无论是程序员的工作、学习,还是生活中的事情。都可以遵循这样一条原则:“,简单的事情重复做,正确的事情重复做。” 这样的努力会让你走到正道上,少走很多弯路。从小司机变成老司机。上一节你应该已经掌握了ArrayList的扩容原理,System.arrayCopy方法,还有看源码的一些思想和方法。这一节更多的是练习一下学到的思想和方法,带你快速摸一下ArrayList其他常用方法的源码原理,看看他们里面的一些亮点,这一节还可以让你简单了解下fail-fast机制,之前的modCount到底是干什么的。轻车..
原创
发布博客 2021.10.16 ·
177 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多