本文内容
小于 1 分钟
前言
在 上一篇文章 中,理解了线程池的使用方法和核心原理后,接下来我们就手撸一个简易版的线程。
我会从一个最简单的版本开始,一步步找出问题,然后提出解决思路,最后编码实现,最后完成一个基本功能完备的线程池。
项目地址:https://github.com/AruNi-01/JavaConcurrency/tree/master/src/main/java/com/run/threadpool
AQS 全称 AbstractQueuedSynchronizer,即抽象队列同步器,是 JUC 包下的一个 构建锁和同步器的框架。
AQS 是一个抽象类,内部提供了一些使用 protected
修饰的方法,意图就是让我们自己 继承 AQS,重写这些模板方法,即可来构建自己的同步器。
前言
上一篇文章简单介绍了 AQS 的概念和底层实现,但是还未深入源码,这篇文章将基于源码来剖析 AQS 是如何实现的。
volatile 关键字是一个轻量级的同步机制,一般作用于 变量,在并发场景下保证了内存的 可见性,以及 避免了指令的重排序。
volatile 三大特性:
我们为什么需要并发?并发编程 Bug 的源头是什么?如何解决并发问题?分享一张图告诉大家:
ThreadLocal 叫做本地线程变量,顾名思义,ThreadLocal 中存放的是 当前线程的变量,该变量对其他线程而言是 隔离 的。对于 ThreadLocal 存放的变量,在每个线程中都有一份自己的 副本变量,多个线程互不干扰。
下面使用一个简单的例子来展示 ThreadLocal 的线程隔离: