2019年12月22日
摘要: 前言 Semaphore也是JUC包中一个用于并发控制的工具类,举个常用场景的例子:有三台电脑五个人,每个人都要用电脑注册一个自己的账户,这时最开始只能同时有三个人操作电脑注册账户,这三个人中有人操作完了剩下的两个人才能占用电脑注册自己的账户。这就是Semaphore的经典使用场景,跟并发加锁有点像 阅读全文
posted @ 2019-12-22 10:31 淡墨痕 阅读(1004) 评论(0) 推荐(2) 编辑
  2019年12月21日
摘要: 前言 前面四节学完了AQS最难的两种重入锁应用,下面两节进入实战学习,看看JUC包中其他的工具类是如何运用AQS实现特定功能的。今天一起看一下CountDownLatch。 CountDownLatch可以用来实现多个线程执行完一个功能后让另一个线程继续执行的功能。常见的场景比如大文件的处理,我们需 阅读全文
posted @ 2019-12-21 21:54 淡墨痕 阅读(795) 评论(0) 推荐(1) 编辑
摘要: 前言 继续JUC包中ReentrantReadWriteLock的学习,今天学习释放锁。 一、写锁释放锁 入口方法 1 public void unlock() { 2 sync.release(1); 3 } 进入AQS追踪release方法: 1 public final boolean rel 阅读全文
posted @ 2019-12-21 13:29 淡墨痕 阅读(1042) 评论(3) 推荐(1) 编辑
  2019年12月19日
摘要: 前言 前两篇我们讲述了ReentrantLock的加锁释放锁过程,相对而言比较简单,本篇进入深水区,看看ReentrantReadWriteLock-读写锁的加锁过程是如何实现的,继续拜读老Lea凌厉的代码风。 一、读写锁的类图 读锁就是共享锁,而写锁是独占锁。读锁与写锁之间的互斥关系为:读读可同时 阅读全文
posted @ 2019-12-19 22:44 淡墨痕 阅读(1492) 评论(2) 推荐(4) 编辑
  2019年12月13日
摘要: 前言 在AQS系列(一)中我们一起看了ReentrantLock加锁的过程,今天我们看释放锁,看看老Lea那冷峻的思维是如何在代码中笔走龙蛇的。 正文 追踪unlock方法: 1 public void unlock() { 2 sync.release(1); 3 } 很简单的一行,调用了rele 阅读全文
posted @ 2019-12-13 00:00 淡墨痕 阅读(790) 评论(1) 推荐(2) 编辑
  2019年12月8日
摘要: 前言 ArrayList想必是广大Java程序员开发时最常用的数据结构了,但不一定对其原理都有了解,今天我将结合ArrayList的源码对其进行讲解。本文将围绕ArrayList主要特性(包括适用场景、初始大小、扩容等)、数据存放方式、核心方法实现、其他特性等四个方面进行讲解。 一、ArrayLis 阅读全文
posted @ 2019-12-08 22:46 淡墨痕 阅读(3195) 评论(0) 推荐(0) 编辑
  2019年12月7日
摘要: 前言 AQS即AbstractQueuedSynchronizer,是JUC包中的一个核心抽象类,JUC包中的绝大多数功能都是直接或间接通过它来实现的。本文是AQS系列的第一篇,后面会持续更新多篇,争取将JUC包中AQS相关的常用功能讲清楚,一方面巩固自己的知识体系,一方面亦可与各位园友互相学习。寒 阅读全文
posted @ 2019-12-07 22:38 淡墨痕 阅读(994) 评论(3) 推荐(2) 编辑
  2019年12月1日
摘要: 前言 本篇主要介绍一下synchronized的批量重偏向和批量撤销机制,属于深水区,大家提前备好氧气瓶。 上一篇说完synchronized锁的膨胀过程,下面我们再延伸一下synchronized锁的两种特殊处理,一种是锁的批量重偏向,一种是锁的批量撤销。JVM中有两个参数,BiasedLocki 阅读全文
posted @ 2019-12-01 19:14 淡墨痕 阅读(458) 评论(0) 推荐(0) 编辑
摘要: 前言 近期研读路神之绝世武学,徜徉于浩瀚无垠知识之海洋,偶有攫取吉光片羽,惶恐未领略其精髓即隐入岁月深处,遂急忙记录一二,顺备来日吹cow之谈资。本小系列为并发之亲儿子-独臂狂侠synchronized专场。 一、使用场景 synchronized是java中的一个关键字,用于给对象加锁,保证在单机 阅读全文
posted @ 2019-12-01 19:13 淡墨痕 阅读(496) 评论(1) 推荐(0) 编辑
摘要: 前言 本文继续【Java并发之synchronized关键字深度解析(一)】一文而来,着重介绍synchronized几种锁的特性。 一、对象头结构及锁状态标识 synchronized关键字是如何实现的给对象加锁?首先我们要了解一下java中对象的组成。java中的对象由3部分组成,第一部分是对象 阅读全文
posted @ 2019-12-01 19:13 淡墨痕 阅读(498) 评论(0) 推荐(0) 编辑