Java并发之CompletionService详解
摘要:CompletionService是什么? 它是JUC包中的一个接口类,默认实现类只有一个ExecutorCompletionService。 CompletionService干什么的? 它将异步任务的生成和执行结果的处理进行了解耦,用来执行Callable的任务(实际也是通过Executor线程
阅读全文
posted @
2021-02-24 22:41
淡墨痕
阅读(963)
推荐(1) 编辑
扯扯Java中的锁
摘要:前言 又过去了一个周末,最近陆陆续续的看了《并发编程的艺术》一书,对锁有不少感悟,这次就聊聊Java中的锁事。本文纯粹是漫谈,想到哪说到哪,但准确性肯定会保证,倘若有不正确之处,还请交流指正。 正文 作为Java开发, 说到锁第一时间想到的肯定是synchronized和juc包中的lock锁这俩兄
阅读全文
posted @
2020-07-27 22:47
淡墨痕
阅读(366)
推荐(0) 编辑
ThreadLocal必知必会
摘要:前言 自从被各大互联网公司的"造火箭"级面试难度吊打之后,痛定思痛,遂收拾心神,从基础的知识点开始展开地毯式学习。每一个非天才程序猿都有一个对35岁的恐惧,而消除恐惧最好的方式就是面对它、看清它、乃至跨过它,学习就是这个世界给普通人提供的一把成长型武器,掌握了它,便能与粗暴的生活一战。 最近看了好几
阅读全文
posted @
2020-05-22 23:23
淡墨痕
阅读(758)
推荐(1) 编辑
AQS系列(七)- 终篇:AQS总结
摘要:前言 本文是对之前AQS系列文章的一个小结,首先看看以下几个问题: 1、ReentrantLock和ReentrantReadWriteLock的可重入特性是如何实现的? 2、哪个变量控制着锁是否被占用? 3、多个线程竞争一个排它锁时,未抢到锁的线程是如何阻塞的? 4、读读真的可以一直共享不阻塞吗?
阅读全文
posted @
2020-04-19 16:49
淡墨痕
阅读(1185)
推荐(0) 编辑
AQS系列(六)- Semaphore的使用及原理
摘要:前言 Semaphore也是JUC包中一个用于并发控制的工具类,举个常用场景的例子:有三台电脑五个人,每个人都要用电脑注册一个自己的账户,这时最开始只能同时有三个人操作电脑注册账户,这三个人中有人操作完了剩下的两个人才能占用电脑注册自己的账户。这就是Semaphore的经典使用场景,跟并发加锁有点像
阅读全文
posted @
2019-12-22 10:31
淡墨痕
阅读(1035)
推荐(2) 编辑
AQS系列(五)- CountDownLatch的使用及原理
摘要:前言 前面四节学完了AQS最难的两种重入锁应用,下面两节进入实战学习,看看JUC包中其他的工具类是如何运用AQS实现特定功能的。今天一起看一下CountDownLatch。 CountDownLatch可以用来实现多个线程执行完一个功能后让另一个线程继续执行的功能。常见的场景比如大文件的处理,我们需
阅读全文
posted @
2019-12-21 21:54
淡墨痕
阅读(810)
推荐(1) 编辑
AQS系列(四)- ReentrantReadWriteLock读写锁的释放锁
摘要:前言 继续JUC包中ReentrantReadWriteLock的学习,今天学习释放锁。 一、写锁释放锁 入口方法 1 public void unlock() { 2 sync.release(1); 3 } 进入AQS追踪release方法: 1 public final boolean rel
阅读全文
posted @
2019-12-21 13:29
淡墨痕
阅读(1056)
推荐(1) 编辑
AQS系列(三)- ReentrantReadWriteLock读写锁的加锁
摘要:前言 前两篇我们讲述了ReentrantLock的加锁释放锁过程,相对而言比较简单,本篇进入深水区,看看ReentrantReadWriteLock-读写锁的加锁过程是如何实现的,继续拜读老Lea凌厉的代码风。 一、读写锁的类图 读锁就是共享锁,而写锁是独占锁。读锁与写锁之间的互斥关系为:读读可同时
阅读全文
posted @
2019-12-19 22:44
淡墨痕
阅读(1562)
推荐(4) 编辑
AQS系列(二)- ReentrantLock的释放锁
摘要:前言 在AQS系列(一)中我们一起看了ReentrantLock加锁的过程,今天我们看释放锁,看看老Lea那冷峻的思维是如何在代码中笔走龙蛇的。 正文 追踪unlock方法: 1 public void unlock() { 2 sync.release(1); 3 } 很简单的一行,调用了rele
阅读全文
posted @
2019-12-13 00:00
淡墨痕
阅读(801)
推荐(2) 编辑
AQS系列(一)- ReentrantLock的加锁
摘要:前言 AQS即AbstractQueuedSynchronizer,是JUC包中的一个核心抽象类,JUC包中的绝大多数功能都是直接或间接通过它来实现的。本文是AQS系列的第一篇,后面会持续更新多篇,争取将JUC包中AQS相关的常用功能讲清楚,一方面巩固自己的知识体系,一方面亦可与各位园友互相学习。寒
阅读全文
posted @
2019-12-07 22:38
淡墨痕
阅读(1040)
推荐(2) 编辑
Java并发之synchronized关键字深度解析(三)
摘要:前言 本篇主要介绍一下synchronized的批量重偏向和批量撤销机制,属于深水区,大家提前备好氧气瓶。 上一篇说完synchronized锁的膨胀过程,下面我们再延伸一下synchronized锁的两种特殊处理,一种是锁的批量重偏向,一种是锁的批量撤销。JVM中有两个参数,BiasedLocki
阅读全文
posted @
2019-12-01 19:14
淡墨痕
阅读(537)
推荐(0) 编辑
Java并发之synchronized关键字深度解析(一)
摘要:前言 近期研读路神之绝世武学,徜徉于浩瀚无垠知识之海洋,偶有攫取吉光片羽,惶恐未领略其精髓即隐入岁月深处,遂急忙记录一二,顺备来日吹cow之谈资。本小系列为并发之亲儿子-独臂狂侠synchronized专场。 一、使用场景 synchronized是java中的一个关键字,用于给对象加锁,保证在单机
阅读全文
posted @
2019-12-01 19:13
淡墨痕
阅读(509)
推荐(0) 编辑
Java并发之synchronized关键字深度解析(二)
摘要:前言 本文继续【Java并发之synchronized关键字深度解析(一)】一文而来,着重介绍synchronized几种锁的特性。 一、对象头结构及锁状态标识 synchronized关键字是如何实现的给对象加锁?首先我们要了解一下java中对象的组成。java中的对象由3部分组成,第一部分是对象
阅读全文
posted @
2019-12-01 19:13
淡墨痕
阅读(516)
推荐(0) 编辑
Java线程的中断
摘要:引言 Java没有提供任何机制来安全地终止线程,但提供了中断机制,即thread.interrupt()方法。线程中断是一种协作式的机制,并不是说调用了中断方法之后目标线程一定会立即中断,而是发送了一个中断请求给目标线程,目标线程会自行在某个取消点中断自己。这种设定很有必要,因为如果不论线程执行到何
阅读全文
posted @
2019-05-26 16:28
淡墨痕
阅读(772)
推荐(0) 编辑
Thread线程的基础知识及常见疑惑点
摘要:引言 相信各位道友在平时工作中已经很少直接用到Thread线程类了,现在大多是通过线程池或者一些多线程框架来操作线程任务,但我觉得还是有必要了解清楚Thread线程类中各种方法的含义,了解了底层才能更好的理解框架、应用框架。下面我就将Thread线程的相关基础点总结一二,以供观瞻。 正文 1、Thr
阅读全文
posted @
2019-05-25 22:59
淡墨痕
阅读(729)
推荐(0) 编辑