Skip to content

Commit e98b484

Browse files
author
chenyong
committed
docs(aqs): add note about why aqs
1 parent e133a63 commit e98b484

File tree

1 file changed

+5
-0
lines changed

1 file changed

+5
-0
lines changed

java/basic/java-thread-juc.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# 目录
2+
* [为什么要AQS?](#为什么要AQS)
23
* [Java为什么会有并发问题](#Java为什么会有并发问题)
34
* [什么是CAS](#什么是CAS)
45
* [Unsafe类解读](#Unsafe类解读)
@@ -7,6 +8,10 @@
78
* [基础类型AtomicInteger](#基础类型AtomicInteger)
89
* [线程池](#线程池)
910

11+
12+
## 为什么要AQS
13+
AQS(Abstracting Queue Sychronizer),望文生义,即一个抽象队列 + 一个需要同步的状态,所谓抽象队列即这个队列并不是真是存在的(通俗的讲,不是一个LinkedList对象),而是像HashMap中的链表一样,只存在Node之间的关系中,每个Node负责维护前置与后置节点,以及持有一个请求线程(可以理解为将一个请求线程封装成Node);
14+
http://chpf.rongsoft.com/article/2020/02/18101645580/
1015
## Java为什么会有并发问题
1116
> 出现的原因
1217
因为Java是一种多线程的处理模型。所以当一个请求过来的时候,Java会将产生一个线程来处理这个请求。如果多个线程访问同一个共享变量的时候,就会出现并发问题。所以,并发问题产生的条件之一是“共享变量”。那么什么样的变量是共享变量呢?这就涉及到Java内存模型JMM了,Java内存模型中,一个Java线程,要想获取到一个变量,需要先将变量从主内存放入工作内存,然后再通过工作内存获取,经历一个lock->read->load->use的过程。每一个线程都有这样一个过程才能获取到变量,这样自然就有可能出现A线程获取到变量,还未赋值回主内存,就被B线程读取或更改的场景,这样自然就会出现不一致问题。

0 commit comments

Comments
 (0)