随笔分类 - Java
Ribbon(Spring Cloud 的负载均衡器)常见负载均衡策略
摘要:Ribbon(Spring Cloud 的负载均衡器)提供了多种负载均衡策略,可以根据实际需求选择合适的策略。以下是一些常见的 Ribbon 负载均衡策略: 轮询(RoundRobinRule): 轮询策略是 Ribbon 的默认策略。它按照固定的顺序将请求依次发送到每个服务实例,实现均衡负载。 随
阅读全文
负载均衡常用算法
摘要:负载均衡算法是服务器负载均衡功能的核心,它们决定了如何将业务流量或任务分配给不同的服务器。以下是一些常见的负载均衡算法,这些算法可以根据服务器的实际负载情况动态地分配任务: 轮询(Round Robin)法: 轮询法将用户的请求按顺序轮流分配给服务器。例如,如果有10台服务器,那么从第1台开始分配,
阅读全文
VarHandle如何确保线程安全
摘要:java.lang.invoke.VarHandle 提供了一种机制,用于在并发环境中对变量进行原子操作,从而帮助确保线程安全。它提供了一组方法,这些方法在访问和修改字段、数组元素和静态变量时具有原子性,这意味着这些操作在多线程环境中是不可中断的,从而避免了数据竞争和不一致的状态。以下是 VarHa
阅读全文
红黑树和AVL树详解
摘要:红黑树(Red Black Tree)和AVL树(Adelson-Velsky and Landis Tree)都是计算机科学中常用的自平衡二叉查找树,它们在设计上有所不同,但目标都是为了在插入、删除和查找操作中保持较好的性能。 1. 红黑树 1.1定义 红黑树(Red Black Tree)是一种
阅读全文
如何优化线程池性能
摘要:优化线程池性能是一个涉及多个方面的过程,以下是一些建议和方法,可以帮助你提高线程池的性能: 设置合适的线程池大小: 根据任务的类型和性质来确定线程池的大小。对于CPU密集型任务,线程数通常设置为CPU核心数或稍大一些的值。对于I/O密集型任务,由于线程在等待I/O操作时大部分时间都是空闲的,因此可以
阅读全文
什么是线程池
摘要:概述 线程池(Thread Pool)是一种多线程处理形式,处理过程中将任务提交给一个线程集合,而不是为每个任务都新建一个线程。线程池在程序启动时创建一组工作线程,并将这些线程放入一个线程集合中,当需要执行一个任务时,线程池会从线程集合中取出一个空闲的线程来执行该任务,任务执行完毕后线程不会立即被销
阅读全文
ExecutorService 类方法介绍及示例
摘要:概述 在Java中,ExecutorService是一个接口,它提供了一种方式来管理异步任务的执行。ExecutorService为线程池提供了框架,允许你控制并发执行任务的各个方面,包括任务的调度、任务的取消、任务的结果处理,以及执行过程中可能出现的异常。 使用ExecutorService可以避
阅读全文
T extends Type 、? extends Type ?与? super Type 的意义与区别分析
摘要:在Java泛型中,T extends Type、? extends Type 和 ? super Type 是三种不同的类型约束,它们在用法和含义上有所不同。以下是对这三种约束的详细解释和比较: T extends Type T extends Type 是在定义泛型类或接口时使用的类型参数约束。它
阅读全文
Apache HttpClient框架常用组件介绍
摘要:1、简介 HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如 Apache Jakarta 上很著名
阅读全文
volatile关键字
摘要:volatile定义 volatile是Java中的一个关键字,它用于确保变量在多线程环境下的可见性和有序性。当一个字段被声明为volatile时,它具有以下特性: 可见性:在多线程环境中,一个线程修改了一个volatile变量的值,这个新值对其他线程来说是立即可见的。这意味着当一个线程更新了一个v
阅读全文
HTTP Client有哪些常用的应用场景
摘要:HTTP Client 的应用场景非常广泛,几乎涵盖了所有需要通过网络发送 HTTP 请求的应用。以下是一些常见的应用场景: Web 应用程序:在开发 Web 应用程序时,HTTP Client 通常用于与后端服务器进行通信。前端页面通过发送 HTTP 请求(如 GET、POST、PUT、DELET
阅读全文
Java中的枚举类是什么
摘要:在Java中,枚举类(Enum Class)是一种特殊的类,用于表示固定数量的常量值。枚举类允许开发者定义一组具名的常量,这些常量在程序中是唯一的、不可变的。枚举类在Java中提供了一种类型安全的方式来表示固定数量的选项或状态。 使用枚举类的好处有很多,包括: 类型安全:枚举类提供了一种类型安全的方
阅读全文
Java中有哪些类的对象是不可变的
摘要:不可变类定义 可变类(Immutable Class)是指类的实例在创建之后其状态就不能被修改。换句话说,一旦创建了一个不可变类的对象,它的所有字段都将保持初始化时的值,并且不能通过该对象的方法来改变这些值 重要的特点 状态不变:一旦对象被创建,其状态(即对象内部字段的值)就不能被改变。 线程安全:
阅读全文
Java有哪些类是原子变量类
摘要:Java中的原子变量类主要包括以下几类: 原子更新基本类型: AtomicInteger:原子更新整型。 AtomicLong:原子更新长整型。 AtomicBoolean:原子更新布尔类型。 原子更新数组: AtomicIntegerArray:原子更新整型数组的元素。 AtomicLongArr
阅读全文
详解Java reactor框架中Flux与Mono区别
摘要:前言 在 Reactor 中,Flux 和 Mono 都是 Reactor 提供的用于处理响应式流的类,它们是 Reactor 的核心概念之一,用于表示数据流的序列。其中响应式流是一种编程范式,用于处理异步数据流和事件流。它主要关注的是如何处理数据流的变化,以响应流中的事件和数据。在响应式编程中,数
阅读全文
在方法的参数部分使用泛型 <T> ,为什么还要方法名前面泛型 <T>?
摘要:前段时间有个刚才学习java泛型的园友向我问题了一个非常基础的问题:在方法的参数部分使用泛型 <T> ,为什么还要方法名前面泛型 <T>?让我来解释一下为什么在方法的参数部分使用泛型 <T> 时,仍然需要在方法名前面声明泛型 <T>。 在Java中,当您在方法的参数部分使用泛型 <T> 时,这个泛型
阅读全文
java入门之Function<T, R>详解
摘要:一、源码分析package java.util.function; import java.util.Objects; /** * 表示接受一个参数并生成结果的函数。 * * <p>这是一个<a href="package-summary.html">函数式接口</a>,其功能方法为{@link #
阅读全文
java入门之? super T和? extends T 应用
摘要:在Java中,`? super T`和`? extends T`都是通配符泛型,用于表示未知类型的范围或限定。它们的主要区别在于对泛型类型参数的上下界限定不同。 - `? super T`:表示通配符泛型的下界限定,表示泛型类型参数的“父类”边界。也就是说,可以接受T类型及T的父类作为实际类型参数。
阅读全文
application.properties详解
摘要:作者其他技术文章 1) 初识 Spring Boot-Spring Boot教程深入浅出系列 2)spring cloud 入门教程 3)SpringCloud入门之Spring Boot多环境配置切换指南 4) Elasticsearch从入门到精通 5) Kibana从入门到精通 6) logs
阅读全文
application.yml文件详解
摘要:一、bootstrap.yml或application.yml简介 SpringBoot默认支持properties和YAML两种格式的配置文件。前者格式简单,但是只支持键值对。如果需要表达列表,最好使用YAML格式。SpringBoot支持自动加载约定名称的配置文件,例如application.y
阅读全文