
Spring Boot3学习之基础篇
一、前言 {#一、前言} ------------ 在N年前整理过 **Spring Boot** 的入门教程,当时还是 1.x 的内容。如今 **Spring Boot** 已经升级到 3.x 版本,不过版本之间的使用差距不大,此次发布文章仅当作常规知识以及新版本功能的补充。 如果你已经掌握 **Spring** 和 **SpringMVC** 知识,但还不熟 **Spr...
一、前言 {#一、前言} ------------ 在N年前整理过 **Spring Boot** 的入门教程,当时还是 1.x 的内容。如今 **Spring Boot** 已经升级到 3.x 版本,不过版本之间的使用差距不大,此次发布文章仅当作常规知识以及新版本功能的补充。 如果你已经掌握 **Spring** 和 **SpringMVC** 知识,但还不熟 **Spr...
一、前言 {#一、前言} ------------ 本篇是对 **CountDownLoatch** 工具类的实际场景运用的简单补充,通过 **CountDownLoatch** 实现多线程下载器核心功能。 二、实现原理 {#二、实现原理} ---------------- 使用多线程对目标资源进行分块下载(设置 Range 请求头)提升下载效率,当所有分块下载完成后,再...
一、前言 {#一、前言} ------------ 本篇的介绍对象是 **CountDownLatch** ,它同样是基于 **AQS** 之上扩展的一款多线程场景下的工具类,它可以使一个或多个线程等待其他线程各自执行完毕后再执行。 对于 **CountDownLatch** 理解,我们可以将单次拆开为 **CountDown** 和 **Latch** 。**CountD...
一、前言 {#一、前言} ------------ 在高并发访问的场景下,为了保证项目不被大流量请求的压力影响性能导致项目运行崩溃,常用的解决方案就是**限流** 和**服务降级**。 本篇介绍 **Semaphore** , 直译就是信号量,是基于 **AQS** 扩展的一种多线程并发控制的工具,也就是我们常说的**限流**工具之一。 二、工作原理 {#二、工作原理} ...
一、前言 {#一、前言} ------------ flex 是 flexible Box 的缩写,意为**弹性布局**,用来为盒状模型提供最大的灵活性,任何一个容器都可以指定 flex 布局。 二、布局原理 {#二、布局原理} ---------------- 采用 flex 布局的元素成为 flex 容器。其所有子元素会自动成为容器成员,成为 flex 项目。 通过...
一、前言 {#一、前言} ------------ **AQS** 是抽象的队列同步器,是用来构建锁或其他同步组件的重量级基础框架及整个 **JUC** 体系的基石。 二、相关组件 {#二、相关组件} ---------------- 下边的组件都是基于 **AQS** 框架扩展实现的: * **ReentrantLock**:可重入锁,避免多线程竞争资源的安全问题 *...
简单介绍 {#简单介绍} ------------ **LockSupport** 是用来创建锁和其他同步类的基本线程阻塞原语,是线程等待唤醒机制的一种实现工具类。 等待唤醒机制 {#等待唤醒机制} ---------------- **等待唤醒机制** 是线程中的一种协作机制。多线程之间不单有竞争锁的情况,还有相互协作的场景。比如线程A执行完某一操作需要挂起一段时间,将...
前言 {#前言} -------- 梳理早期与 **Thread** 状态相关的笔记。 状态分类 {#状态分类} ------------ 通过查看 **Thread** 源码,我们可以看到在其类内部定义了线程的状态枚举: |------------------------------------------------------|------------------...
一、什么是 CAS {#一、什么是-CAS} ---------------------- **CAS** 全程 Compare-And-Swap,它的功能是判断内存中某个位置的值是否为预期值,如果是则更改为新值,这个过程是原子性的。 二、CAS 作用 {#二、CAS-作用} -------------------- **CAS** 是另一个无锁解决方案,更准确的是采用乐...
一、前言 {#一、前言} ------------ 要搭建传统 Spring MVC 项目,我们除了需要配置相应的配置文件,还需要在文件中声明包扫描路径,注解驱动,处理器映射器、适配器和视图解析器等相关配置,搭建步骤非常繁琐。 而 **Spring Boot** 则是通过 JavaConfig 的方式将以前繁琐的配置封装起来,我们只需要引入依赖即可完成相应组件的整合。 二...