Java
文章平均质量分 69
FearlessVoyager
这个作者很懒,什么都没留下…
展开
-
Java SPI机制
Java SPI(Service Provider Interface)是JDK内置的一种服务提供发现机制,它允许应用程序在运行时动态地发现并加载实现了特定服务接口的组件。这一机制基于约定优于配置的原则,通过在类路径下查找特定的资源文件来加载实现类。SPI的设计目的是为了降低耦合度,提高系统的可扩展性。原创 2024-03-23 14:00:00 · 740 阅读 · 0 评论 -
Windows 环境多个JDK安装与切换
文件,选择好安装目录进行安装。多个版本的jdk重复这两步操作就好。并且这两条需要移动到最前面,不然后续无法切换jdk版本。编辑完成后,重新开启一个cmd窗口去查看当前版本。去Oracle官网上下载想要安装的jdk版本,原创 2024-01-09 12:38:24 · 599 阅读 · 0 评论 -
Mac 环境多JDK安装与切换
去Oracle官网上下载想要安装的jdk版本,M芯片选择arm架构的。可以根据上面配置的版本别名进行切换。原创 2024-01-08 23:01:02 · 718 阅读 · 0 评论 -
Java常见的限流算法
在分布式系统中,高并发场景下,为了防止系统因突然的流量激增而导致的崩溃,同时保证服务的高可用性和稳定性,限流是最常用的手段。常见的限流算法主要有:固定窗口算法、滑动窗口算法、漏桶算法、令牌桶算法。原创 2023-12-28 00:02:50 · 413 阅读 · 0 评论 -
Java集合--Map
在Java的集合框架中,Map为双列集合,在Map中的元素是成对以键值对的形式存在的,通过键可以找对所对应的值。Map接口有许多的实现类,各自都具有不同的性能和用途。常用的Map接口实现类有HashMapHashtableTreeMap和。HashMap 是 Java 中一个非常常用的集合类,可以通过key的 HashCode 值来快速访问值,具有很快的访问速度,并且由于存储的键值对是无序的,插入的顺序并不会影响到查询的结果。原创 2023-12-14 22:45:00 · 997 阅读 · 0 评论 -
Java NIO 详解
NIO 是 Java SE 1.4 引入的一组新的 I/O 相关的 API,它提供了非阻塞式 I/O、选择器、通道、缓冲区等新的概念和机制。相比与传统的 I/O 多出的 N 不是单纯的 New,更多的是代表了 Non-blocking 非阻塞,NIO具有更高的并发性、可扩展性以及更少的资源消耗等优点。原创 2023-11-14 00:06:11 · 3111 阅读 · 1 评论 -
java导出csv文件工具类
import com.csvreader.CsvWriter;import lombok.extern.slf4j.Slf4j;import javax.persistence.Column;import javax.servlet.http.HttpServletResponse;import java.io.*;import java.lang.reflect.Field;import java.net.URLEncoder;import java.nio.charset.Charse原创 2022-01-30 15:13:49 · 1007 阅读 · 0 评论 -
fastjson常用工具类
package com.lx.vits.biz.service.util;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;import com.alibaba.fastjson.TypeReference;import java.util.ArrayList;import java.util.HashMap;import原创 2022-01-30 14:53:17 · 757 阅读 · 0 评论 -
并发三大性质
1. 原子性一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。2. 可见性一个线程对共享变量的修改,能够及时的被其他线程看到。共享变量如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量。Java内存模型Java内存模型(Java Memory Model)描述了Java程序中各种变量(共享变量)的访问规则,以及在JVM中将变量存储到内存和从内存中读取出变量这样的底层信息。(1)所有的变量都存储在主内存中;(2)每个线程都有原创 2021-06-04 23:36:29 · 164 阅读 · 0 评论 -
Java中常用的锁机制
1. 什么是锁?Java的锁是一种同步机制,用于在多个执行线程的环境中强制对资源的访问限制。2. 锁的种类公平锁/非公平锁(1)公平锁是指多个线程按照申请锁的顺序来获取锁。(2)非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁,有可能先申请的线程一直获取不到锁,从而可能会造成饥饿现象。(3)对于Java ReetrantLock而言,通过构造函数指定该锁是否是公平锁,默认是非公平锁。非公平锁的优点在于吞吐量比公平锁大。(4)对于Synchro原创 2021-05-31 23:06:50 · 670 阅读 · 0 评论 -
Synchronized与ReentrantLock
1. Synchronized锁概念:Synchronized是JVM层面的锁,是Java关键字,通过monitor对象来完成。在执行monitorenter指令时,首先要尝试获取对象锁。如果这个对象没被锁定,或者当前线程已经拥有了那个对象锁,把锁的计算器加1,相应的,在执行monitorexit指令时会将锁计算器就减1,当计算器为0时,锁就被释放了。如果获取对象锁失败,那当前线程就要阻塞,直到对象锁被另一个线程释放为止。锁类型: (1)对象锁:包括方法锁(默认锁对象为this,即当前实例对象)原创 2021-05-27 23:24:20 · 86 阅读 · 0 评论 -
线程之间的几种通信方式
1. 什么是线程间的通信线程间通信其实就是多个线程在操作同一个资源时,多个线程之间不断切换执行时所发出的信号。例如:需要创建两个线程,一条线程只打印1-26的数字,另一条只打印A-Z的字母,最终打印结果为1A2B3C4D…26Z时,这时就需要使用线程之间的通信来交替完成。2. 不同实现方式的demo首先创建一个共用的线程池去管理和运行这两个线程:public class ThreadPoolTest { // 创建一个定长的线程池 private static final Executor原创 2021-05-23 16:12:17 · 3664 阅读 · 0 评论 -
Java多线程
1. 进程与线程的区别进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1–n个线程。(进程是资源分配的最小单位)线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。(线程是cpu调度的最小单位)2. 线程的五种状态创建状态(New):在程序中用构造方法创建了一个线程对象后,新的线程对象便处于新建状态,此时它已经有了相应的内存空间和其他资源,但还处于不可运行状态。就绪状态(Runnable):线程对象创建后原创 2021-05-19 21:31:03 · 115 阅读 · 0 评论 -
Java线程池的分析和使用
什么是Java线程池?线程池顾名思义,就是一个存放Java线程的缓冲区。里面有一些已经创建好的Java线程,需要用到Java线程的时候,直接取用即可。合理利用线程池有哪些好处?第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。如何创建一个线程池?Jav.原创 2021-05-17 22:50:39 · 136 阅读 · 0 评论 -
SpringMvc与Struts2的区别
1.使用框架不同Struts2:采用Filter(StrutsPrepareAndExecuteFilter)实现。Filter在容器启动之后即初始化;服务停止以后坠毁,晚于Servlet。SpringMVC:采用Servlet实现。Servlet在是在调用时初始化,先于Filter调用,服务停止后销毁。2.拦截机制不同Struts2:是类级别的拦截,每次请求就会创建一个Action。Struts2有自己的拦截Interceptor机制。SpringMVC:是方法级别的拦截,一个方法对应一个Req原创 2020-10-20 23:37:46 · 182 阅读 · 0 评论 -
Struts2流程
1.客户端初始化一个指向Servlet容器(例如Tomcat)的请求。2.web容器去读这个工程的web.xml ,在web.xml中配置struts2的核心过滤器FilterDispatcher以及其他过滤器,FilterDispatcher应放在其他过滤器的最后面,用于拦截所有请求。配置如下:<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.str.原创 2020-10-20 22:25:27 · 116 阅读 · 1 评论 -
springmvc流程
SpringMVC的工作原理图:SpringMVC的工作流程:1、 用户发送请求至前端控制器DispatcherServlet。2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),如果找到对应的Hander将会把该Hander返回给DispatcherServlet。4、 DispatcherServlet调用HandlerAdapter处理器适配器来处理该Hander。5原创 2020-10-19 21:23:14 · 109 阅读 · 0 评论 -
java排序
1.Java冒泡排序public static void bubbleSort(int[] arr) {int temp;//定义一个临时变量for(int i=0;i<arr.length-1;i++){//冒泡趟数for(int j=0;j<arr.length-i-1;j++){if(arr[j+1]<arr[j]){temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}}2.Java选择排序public s原创 2020-10-18 21:16:45 · 91 阅读 · 0 评论 -
Java常用函数
Java常用函数substring(): 截取字符串1、str=str.substring(int beginIndex);截取掉str从下标为beginIndex开始的字符串,将剩余字符串赋值给str;例:String str = “abcdefg”;String s = str.substring(1); 返回"bcdefg";str=str.substring(int beginIndex,int endIndex);截取str中从beginIndex开始至endIndex结束时的字符串,原创 2020-10-13 22:18:08 · 223 阅读 · 0 评论