并发编程
-
AQS那些不为人知的细节
大家好,我是阿轩。 今天我们来剖析一下 AQS 的源码。 说到 AQS,我们的第一反应就是 ReentrantLock,CountDownLatch,Semaphore 等等这些并…
-
ThreadLocal那些不为人知的细节
大家好,我是阿轩。 今天我们来剖析一下ThreadLocal的源码。 说到ThreadLocal,我们在日常的开发工作中用的还是挺多的。 比如,用户登录的时候我们可以通过Threa…
-
StampedLock那些不为人知的细节
大家好,我是阿轩。 今天我们来剖析一下StampedLock的源码。 说到StampedLock,可能有的小伙伴会比较陌生,他是在JDK8新增的一种锁,可以说是ReentrantR…
-
LongAdder那些不为人知的细节
大家好,我是阿轩。 今天我们来剖析一下LongAdder的源码。 说到LongAdder,可能有些小伙伴会比较陌生,毕竟日常工作中用的真的很少。 但是,不能说用的很少就不用去学习研…
-
Disruptor那些不为人知的细节
大家好,我是阿轩。 今天我们来剖析一下Disruptor的源码。 说到Disruptor,听过的小伙伴应该不多,毕竟在现在分布式微服务盛行的年代,已经很少有系统还在使用单机服务了,…
-
CompletableFuture那些不为人知的细节
大家好,我是阿轩。 今天我们来剖析一下CompletableFuture的源码。 前言 每当我们一提到异步编程,脑海中第一印象就是Future,但是随着业务逻辑越来越复杂,Futu…
-
FutureTask那些不为人知的细节
大家好,我是阿轩。 今天我们来剖析一下FutureTask的源码。 前言 上篇文章中我们对CompletableFuture的源码进行了一个简单的了解。 同为异步编程,除了使用Co…
-
初探Java多线程
初探Java多线程 如果你还不知道进程和线程是什么,请先自行百度,本文不再赘述其概念。 Java线程的使用 在Java中,实现线程的方式有多种,继承Thread类,实现Runnab…
-
Java线程状态知多少
上篇文章讲述了在Java中如何使用线程,今天将带你了解线程从启动到销毁,整个生命周期会经历的不同状态。 线程状态介绍 在Java中,线程共有6个状态: NEW:新建状态,也就是刚创…
-
如何优雅地关闭一个线程
如何优雅地关闭一个线程 前面给大家展示了如何创建和使用Java线程,讲解了线程的状态及其每个状态之间的流转,接下来给大家分享,如何正确地关闭一个Java线程。 我们知道,一个Jav…
-
从可见性问题理解volatile的作用
从可见性问题理解volatile的作用 在并发编程中,不同的线程可能会对同一个变量进行操作,如果在没有任何措施的干预下,对这个变量的操作结果会有很多不确定性。这就是线程的安全性问题…
-
synchronized的使用与原理
在上篇并发编程系列文章中,笔者从线程安全性问题的三个方面入手,简单剖析了可见性和有序性问题的本质,今天继续将从剩下的原子性问题开始,一起去了解synchronized关键字的使用。…
-
JUC中的重入锁 – ReentrantLock
在JUC中有一个Lock接口,功能和synchronized是类似,都是用于保证线程安全性, 与synchronized不一样的是,Lock接口提供了加锁和释放锁的方法,需要开发者…
-
ReentrantReadWriteLock
ReentrantReadWriteLock是JUC包提供的一个读写锁,在这个类中,维护了一个读锁和一个写锁。 /** Inner class pro…
-
线程的条件等待机制
如果阅读过之前并发系列的文章,相信大家都知道在多线程竞争的情况下,我们可以使用volatile,synchronized,ReentrantLock和ReentrantReadWr…
-
Condition的使用与原理
在ReentrantLock中,还提供了Condition条件控制类,他的功能与wait/notify一样,都是基于某个条件进行等待与唤醒。之所以在JUC中又重复造轮子,是因为原来…