线程是否要锁住同步资源
- 锁住 悲观锁
- 不锁住 乐观锁
锁住同步资源失败 线程是否要阻塞
- 阻塞
- 不阻塞自旋锁,适应性自旋锁
多个线程竞争同步资源的流程细节有没有区别
- 不锁住资源,多个线程只有一个能修改资源成功,其它线程会重试无锁
- 同一个线程执行同步资源时自动获取资源偏向锁
- 多个线程竞争同步资源时,没有获取资源的线程自旋等待锁释放 轻量级锁
- 多个线程竞争同步资源时,没有获取资源的线程阻塞等待唤醒 重量级锁
4.多个线程竞争锁时是否要排队
- 排队公平锁
- 先尝试插队,插队失败在排队非公平锁
一个线程的多个流程能不能获取同一把锁
- 能 可重入锁
- 不能非可重入锁
多个线程能不能共享一把锁
- 能 共享
- 不能排他锁
悲观锁与乐观锁
悲观锁与乐观锁时一种广义的概念,体现的是看待线程同步的不同角度。
悲观锁
悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,在获取数据的时候会先加锁,确保数据不会被别的线程修改。 锁实现:synchronized
接口Lock
的实现类 适用场景:写操作多,先加锁可以保证写操作时数据正确。
乐观锁
乐观锁认为自己在使用数据时不会有别的线程修改数据,所以不会添加锁,只是在更新数据的时候去判断之前有没有别的线程更新了这个数据。 锁实现:CAS
算法,例如AtomicInteger
类的原子自增时通过CAS
自旋实现。 适用场景:读操作较多,不加锁的特点能够使其读操作的性能大幅度提升。 乐观锁的执行流程: 线程A获取到数据以后直接操作,操作完数据以后准备更新同步资源,更新之前会先判断内存中同步资源是否被更新: 1.如果没有被更新,更新内存中同步资源的值。 2.如果同步资源被其他线程更新,根据实现方法执行不同的操做(报错or重试)。
CAS算法
全名:Compare And Swap(比较并交换) 无锁算法:基于硬件原语实现,在不使用锁(没有线程被阻塞)的情况下实现多线程之间的变量同步。 jdk中的实现:java.util.concurrent包中的原子类就是通过CAS来实现了乐观锁。 算法涉及到的三个操作数:
需要读写的内存值V
进行比较的值A
要写入的新值的B
CAS存在的问题
1.ABA问题 线程1准备用CAS将变量的值由A替换为B,在此之前,线程2将变量的值由A替换为C,又由C替换为A,然后线程1执行CAS时发现变量的值仍然为A,所以CAS成功。但实际上这时的现场已经和最初不同了,尽管CAS成功,但可能存在潜藏的问题。 举例:一个小偷,把别人家的钱偷了之后又还了回来,还是原来的钱吗,你老婆出轨之后又回来,还是原来的老婆吗?ABA问题也一样,如果不好好解决就会带来大量的问题。最常见的就是资金问题,也就是别人如果挪用了你的钱,在你发现之前又还了回来。但是别人却已经触犯了法律。 但是jdk已经解决了这个问题。 想追下源码来着,但是一追发现直接到c了。
2.循环时间长开销大 3.只能保证一个共享变量的原子操作
先自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以扫码领取!
总结:绘上一张Kakfa架构思维大纲脑图(xmind)
其实关于Kafka,能问的问题实在是太多了,扒了几天,最终筛选出44问:基础篇17问、进阶篇15问、高级篇12问,个个直戳痛点,不知道如果你不着急看答案,又能答出几个呢?
若是对Kafka的知识还回忆不起来,不妨先看我手绘的知识总结脑图(xmind不能上传,文章里用的是图片版)进行整体架构的梳理
梳理了知识,刷完了面试,如若你还想进一步的深入学习解读kafka以及源码,那么接下来的这份《手写“kafka”》将会是个不错的选择。
-
Kafka入门
-
为什么选择Kafka
-
Kafka的安装、管理和配置
-
Kafka的集群
-
第一个Kafka程序
-
Kafka的生产者
-
Kafka的消费者
-
深入理解Kafka
-
可靠的数据传递
-
Spring和Kafka的整合
-
SpringBoot和Kafka的整合
-
Kafka实战之削峰填谷
-
数据管道和流式处理(了解即可)
afka实战之削峰填谷
- 数据管道和流式处理(了解即可)
[外链图片转存中…(img-AF6dXGGH-1711118286295)]
[外链图片转存中…(img-Tepa6mVV-1711118286296)]
需要更多Java资料的小伙伴可以帮忙点赞+关注,点击传送门,即可免费领取!