同步器
同步器 1. AQS 1.1 核心思想 AQS:AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架,许多同步类实现都依赖于该同步器 AQS 用状态属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取锁和释放锁 独占模式是只有一个线程能够访问资源,如 ReentrantLock…
线程池
线程池 1. 基本概述 线程池:一个容纳多个线程的容器,容器中的线程可以重复使用,省去了频繁创建和销毁线程对象的操作 线程池作用: 降低资源消耗,减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务 提高响应速度,当任务到达时,如果有线程可以直接用,不会出现系统僵死 提高线程的可管理性,如果无限制的创建线程,不仅会消耗系统资源,…
无锁
无锁 1. CAS 1.1 原理 无锁编程:Lock Free CAS 的全称是 Compare-And-Swap,是 CPU 并发原语 CAS 并发原语体现在 Java 语言中就是 sun.misc.Unsafe 类的各个方法,调用 UnSafe 类中的 CAS 方法,JVM 会实现出 CAS 汇编指令,这是一种完全依赖于硬件的功能,实现了原子操…
内存
内存 1. JMM 1.1 内存模型 Java 内存模型是 Java Memory Model(JMM),本身是一种抽象的概念,实际上并不存在,描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式 JMM 作用: 屏蔽各种硬件和操作系统的内存访问差异,实现让 Java 程序在各种平台下都能…
管程
管程 1. 临界区 临界资源:在多线程环境下共享的资源,但一次只能由一个线程访问或修改 临界区:指一段代码或一段程序片段,其中包含对临界资源的访问和操作 竞态条件:多个线程在临界区内执行,由于代码的执行序列不同而导致结果无法预测,称之为发生了竞态条件 一个程序运行多个线程是没有问题,多个线程读共享资源也没有问题,在多个线程对共享资源读写操作时发生指…
🌟 SimpleFramework 🔗 项目源码:GitHub - SimpleFramework | Gitee - SimpleFramework 🛠️ 造轮子项目:从头实现Spring框架 📖 项目简介 Spring框架在Java开发界占据了举足轻重的地位,这主要归功于其易于理解和功能强大的特性。它广泛应用了多种设计模式,为项目提供了规范化的…
线程
进程和线程
线程 1. 创建线程 1.1 继承 Thread 类 步骤 定义一个线程类继承 Thread 类 重写 run 方法,里面是定义线程以后要干啥 new 一个新线程对象 调用 start 方法启动线程(执行的还是run方法) /** * 方法一、通过继承Thread * * @author Enndfp */ public class ThreadD…
进程和线程 1. 进程 进程是计算机中的一个独立执行单元,每个进程都有自己独立的内存空间、代码和数据,是系统进行资源分配的最小单位 进程之间是相互隔离的,一个进程的崩溃通常不会影响其它进程 进程之间通信较为复杂,通常需要使用进程间通信(Inter-Process Communication,IPC)机制,如管道、消息队列、共享内存等 创建和销毁进程…
Redis 分布式缓存
Redis 分布式缓存 基于 Redis 集群解决单机 Redis 存在的问题,单机的 Redis 存在四大问题: 1. 持久化 1.1 RDB 持久化 RDB 全称 Redis Database Backup file(Redis 数据备份文件),也被叫做 Redis 数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当 Redis 实例故…
Redis 通讯协议和内存回收
Redis 通讯协议和内存回收 1. RESP 协议 Redis 是一个 CS 架构的软件,通信一般分两步(不包括 pipeline 和 PubSub): 客户端(client)向服务端(server)发送一条命令 服务端解析并执行命令,返回响应结果给客户端 因此客户端发送命令的格式、服务端响应结果的格式必须有一个规范,这个规范就是通信协议 而在 …