java八股 多线程

2023-12-28 11:53:03

?并发编程篇-01-多线程课程介绍_哔哩哔哩_bilibili

----------基础---------------

1.进程 线程

2.并发 并行

3. 4种线程创建方式

?4.线程状态以及状态转换

5.线程的顺序控制(join? ?)

6.notify 和 notifyAll

7.wait和sleep不同

8.停止线程的方法

volatie关键字定义线程共享变量,然后用这个变量作为线程运行条件?

线程对象.stop()强制停止

interrupt()

?

------------并发安全--------------

1.Sychnoized底层监视器

synchronized底层原理是什么? - 知乎 (zhihu.com)

这个文章讲得好?

Owner和锁对象如何关联?在对象头中根据比特位不同判断

CAS比较并交换id

没人用线程时-->无锁

连续一个线程获取锁-->偏向锁(一次CAS,后续对比线程id)

不竞争的轮流获取锁-->轻量级锁(每次CAS)

竞争-->重量级锁

2.java内存模型JMM(这地方我一开始和内存结构混淆了,注意区分,不难)

?

工作内存可以理解为类似虚拟机栈,是线程独占的内存。

主内存可以理解为堆,是进程独占的,线程共享的。

线程之间不能直接交互数据,线程都可以访问堆(主内存)

线程就要通过数据刷到主内存然后被另一个线程读回去,这样来进行数据交互。

结合内存结构想想就好

并发编程篇-12-线程安全-你谈谈对CAS的理解_哔哩哔哩_bilibili

3.CAS(Compare And Swap 看成乐观锁就好)

用数据当成版本号,比对,如果不对就不能写入。

4.volatile关键字

4.1volatile关键字(线程间可见)

4.2volatile关键字(禁止指令重排)

屏障放在写的上面,读的下面。所以不能随便加,要根据读写操作的位置加,

如果都加volatile也可以,但是会影响cpu效率

5.AQS(锁的基础框架) 一个状态位+一个双向队列

5.1原子性 (CAS)

5.2公平锁非公平锁

6.可重入锁原理(ReentrantLock的原理)

?

7.Sychonized和ReentrantLock区别

8.java多线程死锁

资源就是锁

9.ConcurrentHashMap(新+旧)

9.1(旧的) 分段数组(不可扩容) + 数组(可扩容)

一个key要往分段加数据会加可重入锁,如果高并发情况锁获取重了,会有一个CAS自旋二次保证。然后获取锁的进去添加。

缺点,锁住性能低,分段不能扩容?

?

9.2(新的)和HashMap一样 数组链表红黑树

?

10.并发问题根本原因

----------------线程池--------------

1.线程池参数

2.线程池工作流程

2.线程池阻塞队列

?

3.核心线程数怎么确定?

4.线程池种类

5.ThreadLocal

文章来源:https://blog.csdn.net/m0_50973548/article/details/135258916
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。