多线程(面试篇)

在这里插入图片描述

线程与进程

进程是操作系统调度和分配资源的最小单元,每个进行有独立地址空间,不同的线程之间是隔离的。
每个进程至少有一个线程,也可以多个线程并发执行。
线程是CPU调度和分派的基本单位,同一个进程中的线程共享进程的资源
创建线程的成本比创建进程的成本低
在这里插入图片描述

并发与并行

在这里插入图片描述

线程

在这里插入图片描述

线程状态

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

线程并发安全

synchroized

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

JMM

在这里插入图片描述

乐观锁与悲观锁

悲观锁:悲观锁就像他的名字一样,他的基本思想就是假设每次都会有线程安全问题,所以每次访问资源都采用加锁的方式来避免线程安全问题。数据库中:行锁、共享锁、排他锁;java:synchronized、ReentrantLock;
乐观锁:乐观锁基本思想是每次对资源的访问不存在线程安全问题,因此直接操作数据,操作完成后通过某些机制来判断是都在此期间数据倍更改过,如果被更改则操作失败,否则操作成功。版本号机制、CAS

CAS

在这里插入图片描述

volatile

1、 保证线程间的可见性
volatile修饰共享变量,当一个线程修改了共享变量,能够防止编译器等优化发生,让一个线程对共享变量的修改对其他线程可见。(当一个线程修改了一个被 volatile 修饰的共享变量后,这个修改后的值会立即反映到主内存中。其他线程读取这个变量时,会从主内存中读取最新的值,而不是从线程的工作内存中读取可能过期的副本。这样就保证了不同线程间对这个变量的可见性。)
2、禁止指令重排序
volatile修饰的共享变量会在读写共享变量时加上一个屏障,阻止其他的读写操作越过共享变量,达到阻止指令重排序效果。
3、防止优化
JVM中可能会对代码进行优化,如果一个变量只读取不修改,那么JVM可能会缓存这个变量值,不再从主内存中读取最新值。
在这里插入图片描述

AQS

在这里插入图片描述
在这里插入图片描述

Lock与sychroized

在这里插入图片描述

死锁

在这里插入图片描述

concurrentHashMap

在这里插入图片描述

并发线程安全问题

在这里插入图片描述

线程池

在这里插入图片描述

核心线程数

3在这里插入图片描述

线程池种类

在这里插入图片描述

线程池使用

在这里插入图片描述

线程池拒绝策略

1、中止策略:当线程池无法接受新任务时,抛出异常,不再处理新提交的任务。
2、丢弃策略:当线程池无法接受新任务时,直接丢弃任务,不处理也不抛出异常。
3、丢弃最旧任务:当线程无法接受新线程时,丢弃最旧任务,执行新任务。
4、调用者运行策略:该策略会让调用execute()方法的线程直接执行任务。

ThreadLocal

在这里插入图片描述

方法区
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值