
Java源码解读
文章平均质量分 97
Java源码解读学习
浅沫云归
A Java programmer,
github repository:https://github.com/1321928757,
Welcome to Star,
VX(lsj1321928757)
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
StandardThreadExecutor源码解读与使用(tomcat的线程池实现类)
StandardThreadExecutor 是 Apache Tomcat 中的一个线程池实现类,是 Tomcat 生命周期中的池化线程资源的封装。StandardThreadExecutor是为了更好地适应Tomcat容器中HTTP请求的处理而设计的。通过优先创建非核心线程来执行任务,避免了任务在等待队列中长时间积压,从而提升了服务器的响应速度。原创 2024-11-02 17:37:20 · 906 阅读 · 0 评论 -
StampedLock(戳记锁)源码解读与使用
StampedLock通过引入乐观读锁来解决写线程饥饿的问题。乐观读锁不会阻塞写线程,它允许一个线程在没有写锁的情况下读取数据,并且在读取数据后,通过戳记(stamp)来验证数据是否在读取过程中被修改。如果数据没有被修改,那么读操作成功;如果数据被修改了,那么可以尝试再次获取乐观读锁或者转换为普通的读锁。需要注意的是,StampedLock的使用比ReadWriteLock更加复杂,需要仔细处理锁的获取、验证和释放过程,以避免死锁和其他并发问题。此外,StampedLock不支持重入,因此在需要可重入锁原创 2024-05-04 13:48:30 · 4680 阅读 · 72 评论 -
ReentrantReadWriteLock(可重入读写锁)源码解读与使用
ReentrantReadWriteLock是 Java 提供的一个高级同步机制,特别适用于读多写少的场景。它维护了一对锁,一个用于读操作,允许多个线程同时读取资源,另一个用于写操作,确保在写入时独占访问。相比于ReentrantLock 直接锁读写会有更细的锁粒度,提高读写的并发性能,但也存在线程饥饿问题,也就是在写的时候,其他线程不能读也不能写,这时候若有大量的读操作的话,就会让很多线程等待,造成饥饿问题,在StampedLock中解决了这个问题,下次讲解。原创 2024-04-30 15:49:25 · 2237 阅读 · 74 评论 -
ReentrantLock(可重入锁)源码解读与使用
ReentrantLock是一种独占式的可重入锁,位于JUC包下,是Lock接口的默认实现类。有三个特性:支持可重入,支持公平与非公平特性,提供堵塞锁和非阻塞锁两种获取方法(lock和trylock)其中内部锁的竞争是基于AQS实现的,当某一线程获取锁后,将state值+1,并记录下当前持有锁的线程,再有线程来获取锁时,判断这个线程与持有锁的线程是否是同一个线程,如果是,将state值再+1,这样就实现了锁的可重入。当线程释放锁时,将state值-1,当state值减为0时,表示当前线程彻底释放了锁,唤原创 2024-04-25 20:21:31 · 8828 阅读 · 51 评论 -
CyclicBarrier(循环屏障)源码解读与使用
CyclicBarrier可以让一组线程互相等待,直到最后一个线程也准备就绪后,它们才能继续运行。就好比几个朋友约好一起吃晚餐,必须等到所有人到齐后才能入座就餐。CyclicBarrier实现了这种"集体出发"的功能,每次所有线程就位后,它们可以执行一个预先指定的任务,然后继续向前推进。有趣的是,CyclicBarrier与CountDownLatch不同,它可以重复使用。这也从侧面体现了两者在设计理念上的差异。借鉴了AQS的精髓,CyclicBarrier内部通过ReentrantLock和Con原创 2024-04-23 22:00:48 · 7940 阅读 · 73 评论 -
CountDownLatch(倒计时器)源码解读与使用
在很多的面经中都看到过提问 CountDownLatch 的问题,正好我们最近也在梳理学习AQS(抽象队列同步器)、CAS操作等知识,而 CountDownLatch 又是JUC包下一个比较常见的同步工具类,我们今天就继续来学一下这个同步工具类!CountDownLatch 是一个多线程同步辅助类,它允许一个或多个线程等待一系列操作在其他线程中完成。这个机制类似于一场赛跑,选手们在起跑线准备,等待发令枪响后才能开始比赛。原创 2024-04-22 21:24:43 · 8163 阅读 · 58 评论 -
CAS机制(Compare And Swap)源码解读与三大问题
CAS(Compare And Swap)作为一种无锁编程技术,被广泛应用于Java的并发编程中。它通过利用CPU指令在操作数据时先比较内存值是否发生变化,如未变化则更新,否则重试循环直到成功为止,从而实现非阻塞的原子操作。CAS操作的优势在于避免了传统悲观锁导致的线程阻塞和切换开销,适用于读操作远多于写操作的应用场景。但它也存在着经典的ABA问题、无法保证多个共享变量的原子性以及在高并发写操作时自旋会导致CPU时钟周期浪费等缺陷。在JDK1.5之后,通过版本号机制来解决了ABA问题。对于长时间自旋原创 2024-04-21 20:26:05 · 8972 阅读 · 62 评论 -
利用AQS(AbstractQueuedSynchronizer)实现一个线程同步器
我们在上篇文章带领大家阅读了AQS的源码,理解了AQS的底层实现,AQS 为构建锁和同步器提供了一些通用功能的实现,今天我们就实践一下,基于AQS实现一个同步器,看看AQS如何帮助我们快速构建同步器。同步器是一种用于线程同步的工具,控制多个线程对共享资源的并发访问。如Semaphore信号量,CountDownLatch (倒计时器)、CyclicBarrier(循环屏障)都属于同步器。原创 2024-04-20 21:28:41 · 13700 阅读 · 67 评论 -
AQS(AbstractQueuedSynchronizer,队列同步器)源码解读
AQS 的全称为 AbstractQueuedSynchronizer ,翻译过来的意思就是抽象队列同步器。这个类在 java.util.concurrent.locks 包下面。AQS为Java的并发包提供了强大的同步支持。通过内置的FIFO队列来完成资源获取线程的排队工作,并且利用一个被volatile关键字修饰的int类型的变量表示同步状态。AQS 为构建锁和同步器提供了一些通用功能的实现,许多同步类实现都依赖于它,如常用的ReentrantLock、Semaphore等。原创 2024-04-19 21:15:28 · 13782 阅读 · 48 评论 -
Semaphore(信号量)源码解读与使用
Semaphore 是一个在多线程环境中用于控制对共享资源的访问的同步器(synchronizer),它是 Java 5 中引入的 java.util.concurrent(JUC)包的一部分。Semaphore 维护了一个许可集,线程在执行前必须从 Semaphore 获取一个许可。如果没有许可可用,线程将阻塞等待,直到其他线程释放许可。可以用来限制数据库连接数、限制服务器可处理请求数等。原创 2024-04-17 20:17:25 · 13580 阅读 · 30 评论