自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

盘码客

让技术无死角[Let the technology without blind Angle]

  • 博客(16)
  • 收藏
  • 关注

原创 并发编程-锁的那些事儿【六:Java线程的生命周期】

前言今天这篇我们需要来了解下Java的线程, 在前几篇里面我们总是会提到这么几个词: “用户态”,“内核态”。。。 这些到底啥,而且为啥跟加锁以及性能会扯上关系呢? 其实很简单,对于并发编程来说,说白就是线程之间的通信,如果能够让线程间做的“分工”,“协作”,“互斥”,那么一定意义上就可以实现并发。 但线程不是人呀,人是一种高等生物,咱们的大脑可以做出随意应变的思考,但想要线程协同做事,那么...

2019-11-01 14:35:32 159

原创 并发编程-锁的那些事儿【五:死锁,活锁,饥饿锁,锁优化】

前言经过前面几篇锁特性原理了解后,在面向实际使用场景会产生的问题,进行更深一步学习和解刨; 在前面的例子,都是用在synchronize关键字进行讲述,那么大家思考一个问题,在 中提到 “受保护资源和锁之间的关联关系是 N:1 的关系”,也就意味着一把锁可以同时锁住很多个资源; 那么对应到平常项目中,岂不是高度的串行化执行。 这样的性能肯定是不可以接受的。 所以这时有引出来一个新的名词“细粒度...

2019-10-31 17:46:45 416

原创 并发编程-锁的那些事儿【四:理解原子性,议Java如何保证原子产生的问题】

前言在前面章节,全面概括了并发三大特性,其中可见、有序性还是较为容易理解,并在前面章节都有对其做过场景理解说明,此篇单独对原子性做场景理解;原子性特性把一个或者多个操作在 CPU 执行的过程中不被中断的特性;Java内存模型中,直接保证了原子性变量操作【read,load,use,assign,store,wirte】,在应用中,可以大致认定基本类型操作读写具备原子性的,除了【long,do...

2019-10-12 17:20:22 217

原创 并发编程-锁的那些事儿【三:发行发生原则-Happens-Before】

前言经过前几篇Java内存模型与三大特性了解后,还需要掌握另一中比较苦涩难懂的一块规则:发行发生原则。 如果Java中的有序性,均通过volatile synchronize等方式控制,那么有些场景下有些代码会有些繁琐。 但在开发中,我们并没有这种感觉,正是这个 发行发生原则 在 默默起作用;这个规则十分重要,数据是否存在竞争关系,线程是否安全,都是依靠这个规则来判定。 它真正要表达的是: 前面...

2019-10-12 17:19:06 150 1

原创 并发编程-锁的那些事儿【二:Volatile - 三大特性[原子,有序,可见]】

在上篇并发编程-锁的那些事儿【一:并发的本质-Java内存模型】中了解到Java内存模型的构造,那么接着学习在上述的规则中,如何实现并发安全的; 从这里因为并发的三大特性[原子,有序,可见],可以说这是三个特性,组成了并发编程。 在最后在用Volatile来分析下;并发三大特性[原子性,有序性,可见性]原子性: 把一个或者多个操作在 CPU 执行的过程中不被中断的特性;Java内存模型中,...

2019-09-17 15:04:03 188

原创 并发编程-锁的那些事儿【一:并发的本质-Java内存模型】

并发编程-锁的那些事儿【一:并发的本质-Java内存模型】前言时隔几周,今天我们正式进入并发编程的艺术之中, 在此我分享下指引我学习方向的书籍:《深入理解Java虚拟机》,《Java并发编程的艺术》,《Java并发编程实战》 按照上述顺序依次阅读;真正开始接入并发这门艺术时,其实说难也不难,说简单也不简单。 对于已经“进去”人,他们可以抓住主要核心思想去理解,那么对于“没进去”的小白,可能...

2019-09-17 15:01:36 237

原创 JUC1.8-CopyOnWriteArrayList源码分析

前言CopyOnWriteArrayList 原理:先通过名字定义来看,“在写时复制的列表” 其原理也是如名字含义显而易见。 先看几个着重点:1、线程安全2、适合多读少写场景3、弱一致性4、迭代器不支持可变操作【add,set,remove】大家先把这4点留个印象在脑海里,带着这些点,咱们通过源码跟踪【add,set,indexOf ,remove】进行逐一证实上述观点。1、数据...

2019-09-09 17:17:33 132

原创 JUC1.8-ConcurrentHashMap学习总结-如果我是面试官,我会问哪些面试题?

前言从9月初,开始写博客开始,因笔者平时也是有工作,陆陆续续经过一周多时间,从学习-》解析-》分析 ,并发包中的第一个并发容器ConcurrentHashMap为止。 过程中确实很花费精力,十分枯燥,也有在某一点上死钻牛角尖的时候,导致一度都想打退堂鼓。 但还是得坚持,慢慢用debug方式,逐行去剖解,分析作者的意图, 每当想明白一个难点时,感觉之前的枯燥呀,烦躁呀,一扫而空,美滋滋。 那...

2019-09-06 10:25:36 361

原创 JUC1.8-ConcurrentHashMap源码学习-为什么每次扩容是原来两倍?

##前言这个问题是扩容里面的一个遗留问题,前因后果大家可以去查阅上篇博客JUC1.8-ConcurrentHashMap源码学习-扩容方法解析transfer() ,在将扩容机制时,篇幅过长,因此单独拿出来说明;大家看过源码或者是读过笔者扩容那篇博客,就知道在每次扩容时,均在原容器的基础上,扩大2倍,贴下transfer()源码里面的位置:if (nextTab == null) { ...

2019-09-05 18:04:41 1327

原创 JUC1.8-ConcurrentHashMap源码学习-扩容方法解析transfer()

前言笔者在阅读此篇扩容机制时,对Doug Lea大神佩服的五体投地,满满的精华,还没有全部读懂,真的像一杯好酒,需要满满酝酿,细细品味乐趣以及其中奥妙呀,可以说ConcurrentHashMap的最璀璨的地方就在这里。 不扯了,上源码,具体流程均在代码提现,篇幅较多,慎重。private final void transfer(Node<K,V>[] tab, Node<K,...

2019-09-04 22:44:05 363

原创 JUC1.8-ConcurrentHashMap源码学习-get()

前言前面几篇,我们已经对ConcurrentHashMap的put和初始化,以及细节的一些知识有所了解,大家是不是会感觉还是有些许难度? 没关系,这章咱们来看看另一个常用而且算是简单的读取方法get来增强咱们看源码的自信哈。在看之前,带着这么俩个问题思考:1、看看读方法,与前面的put方法有哪些小关联?2、在读取数据时,如果Map是如何确保读数据的线程安全?上硬菜源码:public ...

2019-09-03 10:43:42 135

原创 JUC1.8-ConcurrentHashMap源码学习-putVal()方法

前言在进入主题前,先用一段描述性的话,来帮助理解put的整体思路:需求: A盒子[容量不知],N物品。 现在让N物品放入到A盒子中;过程:1. 首先要先有一个N物品;2. 在给N物品打上在A盒子的位置坐标,方便我后面获取【类似去超市,储物柜道理】;3. 在看看有没有A盒子。如没有,就去得造一个A盒子,放物品的人,没告诉需要多大容量的盒子,那么默认造一个2次幂的容量的盒子。 注意:这...

2019-09-02 16:46:45 315

原创 JUC1.8-ConcurrentHashMap源码学习-容量是2次幂以及如何保证是2次幂

前言接着前面那篇 JUC1.8-ConcurrentHashMap源码学习-putVal()方法【】–“为什么在没有指定容量的时,默认容量时16呢?-----为什么容量都是的2的次幂呢?”中的问题展开进行分析解刨;分析过程:这个问题其实会衍生出来另一个问题: ConcurrentHashMap是怎么保证容量每次都是2的次幂呢?看可以指定初始容量构造方法:public Concurren...

2019-09-02 16:43:41 311 1

原创 JUC1.8-ConcurrentHashMap源码学习-准备

概述分享下本人在盘ConcurrentHashMap底层源码之前做的技术点预先准备,以及要点方法的学习方式。由于本人之前技术能力也是有限,所以不论之前是有了解过还是未了解的同学都是可以阅读。 当然小菜鸟在阅读学习过程中,有些知识点理解有误,也请各位大佬多多指出。阅读前了解知识点:* 二进制的计算由于在ConcurrentHashMap底层源码过程中,采用大量的位运算代替乘,取余等计算[位...

2019-08-30 18:06:07 197

原创 JDK1.8源码阅读准备

JDK1.8源码阅读准备1. 阅读源码思路死盘官方的JDK文档; 【有英语基础的看原版即可、 有中文基础的来来,走这边jdk api 1.8_google ,MAC环境,请装CHM Reader软件、win环境直接盘;】官方文档是第一手最全最新资料,挑选自己感兴趣的精华,慢慢盘,逐一攻破,主要在总结汇总。2. JDK包结构说明以上目录,请忽略红框以外的包,咱们打桩之路,正是从java这...

2019-08-19 18:11:37 498

原创 CSND博客☞盘码之路开始

CSND博客☞盘码之路开始1. 为什么要开始写博客?* 万丈高楼平地起,基础是关键,根基不稳,别给跟我来论什么架构.* 未来的职业规划之路.* 面试受挫【这个是关键,

2019-08-19 16:12:53 149

空空如也

空空如也

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

TA关注的人

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