前言 日常开发中,我们经常使用锁或者其他同步器来控制并发,那么它们的基础框架是什么呢?如何实现的同步功能呢?本文将详细讲解构建锁和同步器的基础框架--AQS,并根据源码分析其原理。 一、什么是AQS? 1.AQS简介 AQS(AbstractQueuedSynchronizer),抽象队列同步器,它是用来构建锁或其他同步器的基础框架。虽然大多数程序员可能永远不会使用到它,但是知道AQS的原理有助于理解一些锁或同步器的是如何运行的。 那么有哪些同步器是基于AQS实现的呢?这里仅是简单介绍,详情后续会单独总结一篇文章。 同步器 说明 CountDownLatch 递减的计数器,直至...

  aRSRdgycpgWt   2024年08月07日   32   0   0 Java

前言 多线程在访问同一个共享变量时很可能会出现并发问题,特别是在多线程对共享变量进行写入时,那么除了加锁还有其他方法避免并发问题吗?本文将详细讲解ThreadLocal的使用及其源码。 一、什么是ThreadLocal? ThreadLocal是JDK包提供的,它提供了线程本地变量,也就是说,如果你创建了一个ThreadLocal变量,那么访问这个变量的每一个线程,都创建这个变量的一个本地副本。 这样可以解决什么问题呢?当多个线程操作这个变量时,实际操作的是自己线程本地内存里的数据,从而避免线程安全问题。 如下图,线程表中的每个线程,都有自己ThreadLocal变量,线程操作这个变量只是在...

  aRSRdgycpgWt   2024年08月07日   31   0   0 Java

题目链接 一、题目描述 1.题目 有一个单链表的head,我们想删除它其中的一个节点node。给你一个需要删除的节点node。你将无法访问第一个节点head。 链表的所有值都是唯一的,并且保证给定的节点node不是链表中的最后一个节点。删除给定的节点。注意,删除节点并不是指从内存中删除它。 这里的意思是: 给定节点的值不应该存在于链表中。 链表中的节点数应该减少1。 node前面的所有值顺序相同。 node后面的所有值顺序相同。 2.示例 示例1:输入:head=[4,5,1,9],node=5输出:[4,1,9]解释:指定链表中值为5的第二个节点,那么在调用了你的函数之后,该链表应变为...

  aRSRdgycpgWt   2024年08月06日   27   0   0 算法与数据结构

前言 正常情况下,Spring容器加载Bean的顺序是不确定的,那么我们如果需要按顺序加载Bean时应如何操作?本文将详细讲述我们如何才能控制Bean的加载顺序。 场景 我创建了4个Class文件,分别命名为 FirstInitialization SecondInitialization ThirdInitialization ForthInitialization 我希望这4个类按照1、2、3、4的顺序加载。 如下图,直接加载的话,顺序是1、4、2、3,并不能达到要求。 如何控制 注意:网上很多文章说Order注解或Ordered接口可以控制Bean的加载顺序,其是并不能,...

  aRSRdgycpgWt   2024年05月17日   68   0   0 Java

前言 由于系统资源是有限的,为了降低资源消耗,提高系统的性能和稳定性,引入了线程池对线程进行统一的管理和监控,本文将详细讲解线程池的使用、原理。 为什么使用线程池 池化思想 线程池主要用到了池化思想,池化思想在计算机领域十分常见,主要用于减少资源浪费、提高性能等。 池化思想主要包含以下几个方面: 一些常见的资源池包括线程池、数据库连接池、对象池、缓存池、连接池等。 池化思想可以提高系统的性能,因为它减少了资源的创建和销毁次数,避免了不必要的开销。通过池化,系统可以更好地应对高并发情况,降低资源竞争,提高响应速度。 什么是线程池 根据池化思想,在一个系统中,为了避免线程频繁的创建和销毁,...

  aRSRdgycpgWt   2024年05月08日   111   0   0 Java
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~