JAVA每日面经——并发编程(一)必看

👩🏽‍💻个人主页:阿木木AEcru

🔥 系列专栏:《Docker容器化部署系列》 《Java每日面筋》

💹每一次技术突破,都是对自我能力的挑战和超越。

在这里插入图片描述

一、并发编程之AQS

AQS(AbstractQueuedSynchronizer)是 Java 并发编程中的一个重要组件,作为多线程同步器,它在 Java 并发包(java.util.concurrent)多个组件的底层实现。如 Lock、CountDownLatch、Semaphore 等都用到了它。

在 AQS 的设计中,它主要提供了两种锁机制:排它锁和共享锁。

  • 排它锁(Exclusive Lock):也称为独占锁,它确保在同一时刻只有一个线程可以访问共享资源。这意味着当多个线程竞争同一资源时,只有一个线程能够获得锁,并且其他线程必须等待。比如,ReentrantLock 中的重入锁就是排它锁的一种实现,它利用 AQS 实现了这种独占的锁机制。
  • 共享锁(Shared Lock):也称为读锁,它允许多个线程同时访问共享资源,从而提高了并发性。多个线程可以同时获得锁资源,这在某些场景下是非常有用的。比如,CountDownLatch 和 Semaphore 就是利用 AQS 中的共享锁实现的。

它主要由以下几个组成部分构成:

  1. 节点(Node): 用于封装等待获取同步状态的线程。每个节点都包含了线程的引用和状态信息,以双向链表的形式组织在一起,构成等待队列。
  2. 状态(State): 表示共享资源的状态,可以是任意的整数值,代表不同的含义,比如锁的状态或信号量的剩余资源数量。
  3. 等待队列(Wait Queue): 存放等待获取同步状态的线程节点的双向链表。
  4. 同步器方法(Sync Methods): 定义了 AQS 的抽象方法,子类通过实现这些方法来控制同步状态的获取和释放行为,比如tryAcquire()、tryRelease()等。
  5. 条件对象(Condition): 支持精确线程等待和通知机制,用于在满足特定条件之前等待,并在条件满足时被唤醒。
    下面的cas它也有用到,继续往下看吧。
### 腾讯云 Java 面试经验与常见问题 #### 1. 学生信息管理系统的实现细节 在腾讯云的Java面试过程中,可能会涉及到具体项目的经验分享。例如,在构建学生信息管理系统时,使用了IDEA作为集成开发环境,通过Java、Servlet以及JSP技术栈来完成前端交互逻辑的设计[^2]。 对于数据库操作部分,则采用了MySQL来进行数据存储和查询优化等工作;而在更新`Student`对象的信息时,定义了个名为`Update`的方法用于处理业务需求: ```java public boolean Update(Student student) throws Exception { // 更新学生的相关信息至数据库中... } ``` 此方法接收个`Student`类实例参数尝试将其最新状态保存回持久化层内,期间可能抛出异常情况需由调用方捕获解决。 #### 2. 浏览器对服务器响应的处理机制 当浏览器接收到Web应用返回的数据包之后,它会依据HTTP头部字段所提供的元数据指导如何进步动作。假如Content-Type被设置成text/html形式的话,那么渲染引擎就会依照DOM树结构逐步加载样式表单(CSS)、脚本程序(JS),以及其他资源直至整个页完全呈现出来供访问者查看[^3]。 而对于非HTML文档类型的内容——比如图像文件或多媒体流媒体链接等,则按照各自对应的MIME类别采取适当措施予以展现或是触发下载行为。 #### 3. 并发编程概念对比分析 针对多线程环境下同步控制手段的选择上,ReentrantLock相较于内置关键字`synchronized`提供了更加灵活丰富的功能特性集。前者允许程序员显式地获取锁对象、设定公平策略甚至支持条件变量等待/通知模式等功能扩展;而后者则主要依赖于隐式的进入临界区方式实现互斥访问保护机制[^4]。 至于`synchronized`的工作原理方,其本质上是在字节码层利用monitorenter指令标记段代码区域为独占使用的入口点,任何试图执行该段落之前都须先获得关联监视器(Monitor Object)的所有权才能继续前进直到遇到相对应的monitorexit退出为止。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿木木AEcru

感谢您的阅读,赞赏请随意打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值