首页 | 月光中的污点

月光中的污点

云在青天水在瓶

加载中...

文章列表

原创
2024-09-20

Spring Boot3学习之Web篇

要搭建传统 Spring MVC 项目,我们除了需要配置相应的配置文件,还需要在文件中声明包扫描路径,注解驱动,处理器映射器、适配器和视图解析器等相关配置,搭建步骤非常繁琐。 而 Spring Boot 则是通过 JavaConfig 的方式将以前繁琐的配置封装起来,我们只需要引入依赖即可完成相应组件的整合。 使用 Spring Boot 搭建 web 项目,只需要引入如下依赖:
阅读全文
原创
2024-08-31

Spring Boot3学习之基础篇

在N年前整理过 Spring Boot 的入门教程,当时还是 1.x 的内容。如今 Spring Boot 已经升级到 3.x 版本,不过版本之间的使用差距不大,此次发布文章仅当作常规知识以及新版本功能的补充。 如果你已经掌握 Spring 和 SpringMVC 知识,但还不熟 Spring Boot 内容的读者,您可以尝试阅读本篇文章,如有不清楚的地方,可以留言评论,笔者看到自会补充说明。 开发环境: jdk >= 17, maven >= 3.6.3
阅读全文
原创
2023-03-15

简易的多线程下载器

本篇是对 CountDownLoatch 工具类的实际场景运用的简单补充,通过 CountDownLoatch 实现多线程下载器核心功能。 使用多线程对目标资源进行分块下载(设置 Range 请求头)提升下载效率,当所有分块下载完成后,再将所有分块文件按顺序合并成完整的目标文件。 以下为程序运行效果图:
阅读全文
原创
2023-03-15

CountDownLatch 源码详解

本篇的介绍对象是 CountDownLatch,它同样是基于 AQS 之上扩展的一款多线程场景下的工具类,它可以使一个或多个线程等待其他线程各自执行完毕后再执行。 对于 CountDownLatch 理解,我们可以将单次拆开为 CountDown 和 Latch。CountDown 表示倒计时,Latch 表示门闩,当倒计时结束后门闩解除,门就开了。 要完成一项复杂的任务,任务被划分为子任务1和子任务2,3,4...,为了提高执行任务的效率,采用多线程去完成。
阅读全文
原创
2023-03-10

Semaphore 源码详解

在高并发访问的场景下,为了保证项目不被大流量请求的压力影响性能导致项目运行崩溃,常用的解决方案就是限流和服务降级。 本篇介绍 Semaphore, 直译就是信号量,是基于 AQS 扩展的一种多线程并发控制的工具,也就是我们常说的限流工具之一。 Semaphore 通过 permit 来判断线程是否可通行。
阅读全文
原创
2023-03-02

CSS3 之 flex 布局

flex 是 flexible Box 的缩写,意为弹性布局,用来为盒状模型提供最大的灵活性,任何一个容器都可以指定 flex 布局。 采用 flex 布局的元素成为 flex 容器。其所有子元素会自动成为容器成员,成为 flex 项目。 通过给 flex 容器添加 flex 属性来控制 flex 项目的位置和排列方式。
阅读全文
原创
2023-03-01

AQS 源码详解

AQS 是抽象的队列同步器,是用来构建锁或其他同步组件的重量级基础框架及整个 JUC 体系的基石。 下边的组件都是基于 AQS 框架扩展实现的: 虽然这些组件在多线程场景下有不同的作用,但代码中也有相似之处,如都需要管理锁状态,维护阻塞线程,维护唤醒线程。而 AQS 的作用就是将这些相似的、公共的代码封装在一起。
阅读全文
原创
2023-02-21

LockSupport 工具介绍

LockSupport 是用来创建锁和其他同步类的基本线程阻塞原语,是线程等待唤醒机制的一种实现工具类。 等待唤醒机制 是线程中的一种协作机制。多线程之间不单有竞争锁的情况,还有相互协作的场景。比如线程A执行完某一操作需要挂起一段时间,将运行的机会让给线程B,当线程B执行完任务后就唤醒线程A继续做任务。 Java 提供了 3 种等待唤醒机制:
阅读全文
原创
2023-02-21

Thread 状态速查手册

梳理早期与 Thread 状态相关的笔记。 通过查看 Thread 源码,我们可以看到在其类内部定义了线程的状态枚举: Thread 线程大致分为 6 种,即 NEW,RUNNABLE,BLOCKED, WAITING,TIMED_WAITING,TERMINATED。
阅读全文
原创
2023-02-20

CAS 原理新讲

CAS 全程 Compare-And-Swap,它的功能是判断内存中某个位置的值是否为预期值,如果是则更改为新值,这个过程是原子性的。 CAS 是另一个无锁解决方案,更准确的是采用乐观锁技术,实现线程安全的问题。 在设计思想上,CAS 的执行有三个操作数,V-内存值,A-期望值,B-修改成的目标值。当且仅当 V 的值等于 A 时, CAS 通过原子方式用新值 B 来更新 V 的值,否则不会执行任何操作。
阅读全文