老师问我做网站用到什么创新技术app ui界面设计欣赏
2026/3/6 12:17:55 网站建设 项目流程
老师问我做网站用到什么创新技术,app ui界面设计欣赏,dw怎么新建网站,百度收录删除旧网站文章目录Java面试必看#xff01;AQS的两种同步方式你真的懂了吗#xff1f;前言#xff1a;为什么我要写这篇文章#xff1f;什么是AQS#xff1f;AQS的核心概念独占式同步什么是独占式同步#xff1f;独占式同步的应用场景独占式同步的核心代码实现独占式同步的关键点共…文章目录Java面试必看AQS的两种同步方式你真的懂了吗前言为什么我要写这篇文章什么是AQSAQS的核心概念独占式同步什么是独占式同步独占式同步的应用场景独占式同步的核心代码实现独占式同步的关键点共享式同步什么是共享式同步共享式同步的应用场景共享式同步的核心代码实现共享式同步的关键点独占式同步与共享式同步的区别1. 资源访问方式2. 实现类3. 公平性支持4. 可重入性总结理解这两种机制的区别和应用场景对于我们编写高效、安全的多线程程序具有重要的意义。 领取 | 1000 套高质量面试题大合集无套路闫工带你飞一把Java面试必看AQS的两种同步方式你真的懂了吗前言为什么我要写这篇文章大家好我是闫工。今天又要跟大家聊Java了这次的主题是关于AQSAbstractQueuedSynchronizer的两种同步方式。作为一名热爱Java并发编程的老司机我深知AQS的重要性。每次面试的时候只要提到AQS我都能感受到面试官眼中那期待的目光仿佛在说“你要是能讲清楚AQS的实现原理今天这面试应该就稳了”但是说实话AQS真的有点难搞尤其是它里面的独占式同步和共享式同步这两种机制。很多同学在学习的时候都会被绕进去觉得这两者之间的区别就是“一个独占资源另一个可以共享资源”但具体怎么实现的怎么区分它们的应用场景这些问题还是让人摸不着头脑。所以今天我就来跟大家详细聊聊AQS的两种同步方式。希望这篇文章能让你在面试中对这个问题有一个清晰的认识也能让你在实际开发中更好地使用这些工具类。什么是AQS首先我们得先搞清楚AQS到底是什么。AQS是AbstractQueuedSynchronizer的缩写它是一个用于构建锁和同步器的基础框架。Java中的很多并发工具类都是基于AQS实现的比如ReentrantLock、Semaphore、CountDownLatch等等。简单来说AQS提供了一个队列来管理等待获取资源的线程。当一个线程请求资源而资源不可用时它会被加入到这个队列中排队等待。当资源被释放后AQS会通知下一个线程获取资源。AQS的核心概念在深入了解AQS的两种同步方式之前我们需要先了解AQS的一些核心概念状态stateAQS通过一个整型变量来表示资源的状态。这个状态可以是共享模式下的许可数量也可以是独占模式下的锁持有者信息。队列QueueAQS维护了一个FIFO的等待队列用来管理那些等待获取资源的线程。同步器SyncAQS通过继承它的子类来实现具体的同步逻辑。这些子类需要重写一些关键方法来定义资源的获取和释放方式。独占式同步什么是独占式同步独占式同步顾名思义就是一种“独占”的同步机制。在这种机制下一次只能有一个线程获取到资源。其他请求资源的线程必须等待直到当前持有资源的线程释放资源。独占式同步的应用场景这种机制最常见的应用场景就是互斥锁比如ReentrantLock。在多线程环境下我们常常需要对共享资源进行独占访问以保证数据的一致性和安全性。独占式同步的核心代码实现为了更好地理解独占式同步的实现原理我们可以参考ReentrantLock的实现方式publicclassReentrantLockDemo{privatefinalReentrantLocklocknewReentrantLock();publicvoiddoSomething(){lock.lock();// 尝试获取锁如果锁被占用则阻塞等待try{// 执行需要加锁的代码}finally{lock.unlock();// 释放锁}}}从上面的代码可以看出lock.lock()方法用于尝试获取锁。如果锁已经被其他线程持有当前线程就会进入阻塞状态直到锁被释放。独占式同步的关键点公平性AQS支持两种类型的锁——公平锁和非公平锁。公平锁保证线程按照排队的顺序获取资源而非公平锁则允许“插队”即新来的线程可能会直接尝试获取资源而不需要等待已经排队的线程。可重入性独占式同步通常支持可重入性也就是说同一个线程可以多次获取锁而不发生死锁。ReentrantLock就是一个典型的例子。中断处理在阻塞状态下线程是可以被中断的。AQS提供了对中断的友好支持确保线程在被中断时能够及时释放资源并退出。共享式同步什么是共享式同步共享式同步与独占式同步相反允许多个线程同时获取资源。在这种机制下多个线程可以共享同一个资源直到达到预定义的最大共享度。共享式同步的应用场景这种机制最常见的应用场景是信号量Semaphore。例如在数据库连接池中我们通常会设置一个最大连接数允许多个线程共享这些连接但不能超过这个限制。共享式同步的核心代码实现为了更好地理解共享式同步的实现原理我们可以参考Semaphore的实现方式publicclassSemaphoreDemo{privatefinalSemaphoresemaphorenewSemaphore(3);// 最大允许3个线程同时访问publicvoiddoSomething(){try{semaphore.acquire();// 尝试获取许可如果许可证用完则阻塞等待// 执行需要共享的资源的操作}catch(InterruptedExceptione){Thread.currentThread().interrupt();}finally{semaphore.release();// 释放许可}}}从上面的代码可以看出semaphore.acquire()方法用于尝试获取许可证。如果许可证已经被用完当前线程就会进入阻塞状态直到有许可证被释放。共享式同步的关键点公平性与独占式同步类似共享式同步也支持公平性和非公平性。公平的信号量保证线程按照排队顺序获取许可而非公平信号量允许“插队”。资源控制共享式同步的核心在于对资源共享度的控制。通过设置一个最大值可以有效地管理资源的使用情况。中断处理同样地在阻塞状态下线程是可以被中断的。AQS提供了对中断的友好支持确保线程在被中断时能够及时释放资源并退出。独占式同步与共享式同步的区别通过上面的介绍我们已经大致了解了独占式同步和共享式同步的基本概念和实现原理。那么它们之间到底有哪些区别呢我们可以从以下几个方面来对比1. 资源访问方式独占式同步一次只能有一个线程获取资源。共享式同步允许多个线程同时获取资源直到达到预设的最大值。2. 实现类独占式同步常见的实现类有ReentrantLock、ReadWriteLock等。共享式同步常见的实现类有Semaphore、CountDownLatch等。3. 公平性支持独占式同步支持公平锁和非公平锁两种类型。共享式同步支持公平信号量和非公平信号量两种类型。4. 可重入性独占式同步通常支持可重入性如ReentrantLock。共享式同步一般不支持可重入性。例如Semaphore不允许同一个线程多次获取许可证而不释放它。总结通过本文的介绍我们可以清晰地看到独占式同步和共享式同步是两种不同的资源管理机制适用于不同的应用场景。选择哪种机制取决于具体的业务需求如果需要对资源共享进行严格的控制并且允许多个线程同时访问那么共享式同步如Semaphore会是一个更好的选择。如果需要确保只有一个线程能够访问某个资源或代码块以避免数据不一致和竞态条件那么独占式同步如ReentrantLock会更加合适。理解这两种机制的区别和应用场景对于我们编写高效、安全的多线程程序具有重要的意义。 领取 | 1000 套高质量面试题大合集无套路闫工带你飞一把成体系的面试题无论你是大佬还是小白都需要一套JAVA体系的面试题我已经上岸了你也想上岸吗闫工精心准备了程序准备面试想系统提升技术实力闫工精心整理了1000 套涵盖前端、后端、算法、数据库、操作系统、网络、设计模式等方向的面试真题 详细解析并附赠高频考点总结、简历模板、面经合集等实用资料✅ 覆盖大厂高频题型✅ 按知识点分类查漏补缺超方便✅ 持续更新助你拿下心仪 Offer免费领取 点击这里获取资料已帮助数千位开发者成功上岸下一个就是你✨

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询