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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!