File tree Expand file tree Collapse file tree 1 file changed +5
-0
lines changed Expand file tree Collapse file tree 1 file changed +5
-0
lines changed Original file line number Diff line number Diff line change 1
1
# 目录
2
+ * [ 为什么要AQS?] ( #为什么要AQS )
2
3
* [ Java为什么会有并发问题] ( #Java为什么会有并发问题 )
3
4
* [ 什么是CAS] ( #什么是CAS )
4
5
* [ Unsafe类解读] ( #Unsafe类解读 )
7
8
* [ 基础类型AtomicInteger] ( #基础类型AtomicInteger )
8
9
* [ 线程池] ( #线程池 )
9
10
11
+
12
+ ## 为什么要AQS
13
+ AQS(Abstracting Queue Sychronizer),望文生义,即一个抽象队列 + 一个需要同步的状态,所谓抽象队列即这个队列并不是真是存在的(通俗的讲,不是一个LinkedList对象),而是像HashMap中的链表一样,只存在Node之间的关系中,每个Node负责维护前置与后置节点,以及持有一个请求线程(可以理解为将一个请求线程封装成Node);
14
+ http://chpf.rongsoft.com/article/2020/02/18101645580/
10
15
## Java为什么会有并发问题
11
16
> 出现的原因
12
17
因为Java是一种多线程的处理模型。所以当一个请求过来的时候,Java会将产生一个线程来处理这个请求。如果多个线程访问同一个共享变量的时候,就会出现并发问题。所以,并发问题产生的条件之一是“共享变量”。那么什么样的变量是共享变量呢?这就涉及到Java内存模型JMM了,Java内存模型中,一个Java线程,要想获取到一个变量,需要先将变量从主内存放入工作内存,然后再通过工作内存获取,经历一个lock-> read->load->use的过程。每一个线程都有这样一个过程才能获取到变量,这样自然就有可能出现A线程获取到变量,还未赋值回主内存,就被B线程读取或更改的场景,这样自然就会出现不一致问题。
You can’t perform that action at this time.
0 commit comments