面试败给Java并发?阿里P8提供27道并发面试解析,让你吊锤面试官

并发编程相比 Java 中其他知识点学习起来门槛相对较高,学习起来比较费劲,从而导致很多人望而却步;而无论是职场面试和高并发高流量的系统的实现却都还离不开并发编程,从而导致能够真正掌握并发编程的人才成为市场比较迫切需求的。

**因此,大家不难发现 Java 并发问题一直是各个大厂面试的重点之一。**我在平时的面试中,也发现很多候选人对一些基本的并发概念表示没听过,或原理不理解,可能知道一些却又讲不清楚,最终导致面试失败。本文会结合实际中接触到的一些面试题,重点来聊一聊 Java 并发中的相关知识点。

面试败给Java并发?阿里P8提供27道并发面试解析,让你吊锤面试官

并发编程高级面试专题

Synchronized相关面试题集

面试败给Java并发?阿里P8提供27道并发面试解析,让你吊锤面试官

可重入锁 ReentrantLock 及其他显式锁相关面试题集

面试败给Java并发?阿里P8提供27道并发面试解析,让你吊锤面试官

Java 线程池相关问题

面试败给Java并发?阿里P8提供27道并发面试解析,让你吊锤面试官

Java 内存模型相关问题

面试败给Java并发?阿里P8提供27道并发面试解析,让你吊锤面试官

面试题答案

1.Synchronized 用过吗, 其原理是什么?

这是一道 Java 面试中几乎百分百会问到的问题, 因为没有任何写过并发程序的开发者会没听说或者没接触过 Synchronized。 Synchronized 是由 JVM 实现的一种实现互斥同步的一种方式, 如果你查看被Synchronized 修饰过的程序块编译后的字节码, 会发现, 被 Synchronized 修饰过 的程序块, 在编译前后被编译器生成了monitorenter 和 monitorexit 两个字节码指 令。这两个指令是什么意思呢? 在虚拟机执行到 monitorenter 指令时, 首先要尝试获取对象的锁: 如果这个对象没 有锁定, 或者当前线程已经拥有了这个对象的锁, 把锁 的 计 数 器 +1; 当 执 行 monitorexit 指令时将锁计 数 器 -1; 当计数器为0时 , 锁就被 释放了 。 如果获取对象失败了, 那当前线程就要阻塞等待, 直到对象锁被另外一个线程释放为 止。Java中Synchronize 通过在对象头设置标记 , 达到了获取锁和释放锁的目的 。

2.跟Synchronized相比, 可重入锁Reentrant Lock其实现原理有什么不同?

其实, 锁的实现原理基本是为了达到一个目的: 让所有的线程都能看到某种标记。 Synchronized 通过在对象头中设置标记实现了这一目的 , 是一种JVM原 生的锁实现方式, 而 Reentrant Lock 以及所有的基于 Lock 接口的实现类, 都是通过用一个 volitile修饰的int型变量,并保证每个线程都能拥有对该int的可见性和原子修改, 其本质是基于所谓的 AQS 框架。

3. Java 中的线程池是如何实现的?

1.在 Java 中 , 所谓的线程池中的 “ 线 程 ” ,其 实 是 被 抽 象 为了一个静态内部类 Worker, 它 基 于 AQS 实 现 , 存 放 在 线 程 池 的 Hash Set< Worker> workers 成 员 变 量 中 ; 2.而需要执行的任务则存放在成员变量 work Queue ( Blocking Queue< Runnable> work Queue) 中。 这样 , 整个线程池实现的基本思想就是:从 work Queue中不断取出需 要 执 行 的 任 务 , 放在Workers中进行处理 。

4.什么是 Java 的内存模型, Java 中各个线程是怎么彼此看到对方的变量的?

Java 的内存模型定义了程序中各个变量的访问规则, 即在虚拟机中将变量存储到内 存和从内存中取出这样的底层细节。 此处的变量包括实例字段、 静态字段和构成数组对象的元素, 但是不包括局部变量和 方法参数, 因为这些是线程私有的, 不会被共享, 所以不存在竞争问题。 Java 中各个线程是怎么彼此看到对方的变量的呢?**Java中定义了主内存与工作内存 的概念: **所有的变量都存储在主内存, 每条线程还有自己的工作内存, 保存了被该线程使用到 的变量的主内存副本拷贝。 线程对变量的所有操作( 读取、 赋值) 都必须在工作内存中进行, 不能直接读写主 内存的变量。 不同的线程之间也无法直接访问对方工作内存的变量, 线程间变量值的 传递需要通过主内存。

由于篇幅限制,太长看下去会很乏味,也会影响阅读体验,上面是每个题集的一题答案,下面展现将以图片形式展示。获取原文件以及更多资源请关注点赞分享后,后台**点这里**获取资料免费领取方式!

面试败给Java并发?阿里P8提供27道并发面试解析,让你吊锤面试官

面试败给Java并发?阿里P8提供27道并发面试解析,让你吊锤面试官

对下面学习笔记有需要的可以关注点赞后点这里获取资源免费获取方式。还有更多面试题整理中,可以一并获取。

面试败给Java并发?阿里P8提供27道并发面试解析,让你吊锤面试官

面试败给Java并发?阿里P8提供27道并发面试解析,让你吊锤面试官

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值