线程是否要锁住同步资源

  • 锁住 悲观锁
  • 不锁住 乐观锁

锁住同步资源失败 线程是否要阻塞

  • 阻塞
  • 不阻塞自旋锁,适应性自旋锁

多个线程竞争同步资源的流程细节有没有区别

  • 不锁住资源,多个线程只有一个能修改资源成功,其它线程会重试无锁
  • 同一个线程执行同步资源时自动获取资源偏向锁
  • 多个线程竞争同步资源时,没有获取资源的线程自旋等待锁释放 轻量级锁
  • 多个线程竞争同步资源时,没有获取资源的线程阻塞等待唤醒 重量级锁

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.只能保证一个共享变量的原子操作

最后

现在其实从大厂招聘需求可见,在招聘要求上有高并发经验优先,包括很多朋友之前都是做传统行业或者外包项目,一直在小公司,技术搞的比较简单,没有怎么搞过分布式系统,但是现在互联网公司一般都是做分布式系统。

所以说,如果你想进大厂,想脱离传统行业,这些技术知识都是你必备的,下面自己手打了一份Java并发体系思维导图,希望对你有所帮助。

资料获取方式:戳这里免费下载

思维导图,希望对你有所帮助。

资料获取方式:戳这里免费下载

Java面试2021,java黑马百度云相关推荐

  1. very very good,Java面试宝典+Java核心知识集

    这几天刚整理出炉的两份最全"Java面试宝典+Java核心知识集"(very very good!!!),因此有了今天咱这篇文章,没错,我又来分享干货了!!! Java面试宝典 说 ...

  2. 吃一堑长一智!java开发实战经典答案百度云

    第一个:Alibaba[搜索推荐] 一面:算法题:长度为n的数组里放了n+1个大小在[1,n]的数,必然至少有一个重复的数,找出来 二面:概率题:求一根绳子被切两刀能组成一个三角形的概率. 三面主管面 ...

  3. Java面试2021,java超市收银系统图形界面

    Java如何入门? 1.建立好开发环境 首先建立好开发环境非常重要,工欲善其事,必先利其器.做任何开发,首先就是要把这个环境准备好,之后就可以去做各种尝试,尝试过程中就能逐渐建立信心.初学者往往在环境 ...

  4. 百度java面试应届,秋招 百度二轮面试---血淋淋的经历写实

    一名自信向上的良好青年,参加百度面试被面试官按在地板来回摩擦~ 简单回顾一下,面试的经历吧 百度二面对话大概是这样的. 面:这个知道吗? 我:不知道. 面:这个呢? 我:不知道. 面:那我问你这个吧. ...

  5. 一次幸运的校招小米Java后台offer(1),Java面试2021

    == 我是一个非985/211的本科.其实最开始并不怎么自信,靠的就是一帮基友互相的鼓励,才坚持到了现在. 我小米的面试机会是亲戚给内推的,因为碰巧他们部门校招没有招满,所以很幸运的拿到了这个机会. ...

  6. 46道面试题带你了解中高级Java面试,Java开发必看书籍

    前言 分布式事务主要解决分布式一致性的问题.说到底就是数据的分布式操作导致仅依靠本地事务无法保证原子性.与单机版的事务不同的是,单机是把多个命令打包成一个统一处理,分布式事务是将多个机器上执行的命令打 ...

  7. (Java面试)Java面试越来越难,不加油卷起来,怎么拿到大厂offer!!

    前言 最近看到一则很现实的故事:陆路最近心态很崩.和他同期一道进公司的陈琪又升了一级,可是明明大家在进公司时,陈琪不论是学历还是工作经验,样样都不如自己,眼下不过短短的两年时间便一跃在自己的职级之上, ...

  8. Java面试:java小项目实例

    前言 本人是底层 211 本科,刚毕业,⽆科研经历,但是有些项⽬经历. 在国内监控行业某头部企业做过一段时间的实习. 想着投下字节,可以积累⼀下⾯试经验和为金九银十面招做准备.投了简历之后,过了一段时 ...

  9. 阿里Java面试之-Java高级工程师

    哈喽,大家好呀,前段时间我去阿里面试高级Java工程师,我这次把这些问道的题目都列举出来了! 文章末尾我还为大家准备了一份福利哦! JVM · 请介绍一下JVM内存模型??用过什么垃圾回收器?都说说呗 ...

  10. java面试之Java基础

    Java的数据类型: 包括基本数据类型和引用数据类型: a.基本数据类型: 整数类型{long, int, short, byte}; 浮点类型: float, double; 字符类型: char; ...

最新文章

  1. BZOJ1922: [Sdoi2010]大陆争霸
  2. 为啥程序员下班后只关显示器从不关电脑?看看各大网站的答案~
  3. Programming Pearls: Chatper3 Problem6 [Form letter generator]
  4. anguarjs 图片预览_Text to Image Converter(文字转图片软件)下载-Text to Image Converter(文字转图片软件)v1.5绿色版下载...
  5. LeetCode27——Remove Element(移除数组中指定的元素)
  6. 用DataAdapter对象填充DataSet数据集。
  7. Scrapy学习篇(十)之下载器中间件(Downloader Middleware)
  8. 程序包androidx.appcompat.app不存在
  9. sxe增加服务器,sXe Injected 反作弊插件
  10. 使用深度学习打造智能聊天机器人
  11. 免费赠品发布:Wintry Blue Wallpaper
  12. font标签、特殊字符、标题标签h1-h6
  13. 手把手教你搭建织女星开发板RISC-V开发环境
  14. “九个字、一只手、专有云”,有孚网络的云上之路
  15. cloudera-repos 地址
  16. PureMVC 游戏框架解析
  17. python.exe: No module named pip以及pycharm下载插件失败等问题
  18. 大专毕业,0基础转行C++程序员一个月后,我后悔了
  19. php mysql 库存变负数_解决并发情况下库存减为负数问题
  20. 【小波滤波】基于小波变换的噪声信号滤波处理matlab仿真

热门文章

  1. Javascript eval()函数 基础回顾
  2. Iptables入门教程
  3. 光耀卡服务器维修,3月28日服务器更新维护公告
  4. 有关循环和判断的几个小问题
  5. java接口开发_如果你想学好Java,这些你需要了解
  6. 拼多多分享好友砍价Java实现_拼多多砍价怎么分享到朋友圈 砍价发到微信朋友圈方法...
  7. win8oracle10g安装报错,Win8电脑安装Oracle 10g提示程序异常终止的解决方法
  8. 排除服务器简单系统故障方法,引导CD排除服务器故障方法有哪些?
  9. Linux学习笔记——gzip命令
  10. ubantu下安装Nginx