java八股 多线程

 并发编程篇-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

  • 21
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值