- 博客(49)
- 资源 (1)
- 收藏
- 关注
原创 java 并发编程-CyclicBarrier
CyclicBarrier(回环栅栏或循环屏障),是Java并发库中的一个同步工具,通过它可以实现让一组线程等待至某个状态(屏障点)之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用。与CountDownLatch的区别是CyclicBarrier是可以循环使用的。
2025-04-01 13:24:07
266
原创 java 并发编程-CountDownLatch
CountDownLatch(闭锁)是一个同步协助类,可以用于控制一个或多个线程等待多个任务完成后再执行。CountDownLatch内部维护了一个计数器,该计数器初始值为N,代表需要等待的线程数目,当一个线程完成了需要等待的任务后,就会调用countDown()方法将计数器减1。CountDownLatch的构造非常简单,需要给定一个不能小于0的int数字。,当计数器的值为0时,等待的线程就会开始执行。
2025-04-01 11:37:31
162
原创 java 并发编程-Semaphore
Semaphore(信号量)是一种用于多线程编程的同步工具,主要用于在一个时刻允许多个线程对共享资源进行并行操作的场景。
2025-04-01 10:37:27
259
原创 java 并发编程-ReentrantLock
当有线程调用lock方法的时候:如果线程获取到锁了,那么就会通过CAS的方式把AQS内部的state设置成为1。这个时候,当前线程就获取到锁了。只有首部的节点(head节点封装的线程)可以获取到锁。如果是公平锁的话,当head节点释放锁之后,会优先唤醒head.next这一个节点对应的线程。相当于synchronized中的wait()和notify()机制,通常与Lock接口(比如ReentrantLock)一起使用。允许新来的线程和head之后唤醒的线程通过cas竞争锁。
2025-03-31 17:26:43
301
原创 java 锁升级
调用锁对象的obj.hashCode()或System.identityHashCode(obj)方法会导致该对象的偏向锁被撤销。因为对于一个对象,其HashCode只会生成一次并保存,偏向锁是没有地方保存hashcode的。此时会直接升级成为轻量级锁或重量级锁。
2025-03-31 13:17:02
340
原创 java并发编程4
CAS指令操作包括三个参数:内存值(内存地址值)V、预期值E、新值N,当CAS指令执行时,当且仅当预期值E和内存值V相同时,才更新内存值为N,否则就不执行更新,无论更新与否都会返回否会返回旧的内存值V,上述的处理过程是一个原子操作。当有多个线程对一个原子类进行操作的时候,某个线程在短时间内将原子类的值A修改为B,又马上将其修改为A,此时其他线程不感知,还是会修改成功。
2025-03-27 15:32:51
187
原创 java并发编程2
如果多个线程的业务存在依赖、串行、聚合等关系,这时候我们可以使用CompletableFuture。CompletableFuture实现了对任务的编排能力。相比于Runnable,Future可以获取返回值,取消任务,查看任务是否完成等。
2025-03-25 10:25:00
181
原创 MySql索引
从优到差:system>const>eq_ref>ref>range>index>ALL 一般查询要达到range级别,最好达到ref。ref:与eq_ref相比,不是使用唯一索引,而是使用普通索引或唯一索引的部分前缀。key_len: 联合索引可以通过key_len判断使用到了索引的哪一列。NULL:在查询优化阶段可以分解查询,在执行阶段不需要再访问索引或表。index:扫描全索引就能拿到结果,一般为扫描二级索引。eq_ref:使用主键索引或唯一索引连接查询。SIMPLE: 简单查询,不包含子查询。
2025-03-17 12:53:06
833
原创 JVM类加载
引导类加载器(BootstrapClassLoader):加载 JVM 核心类库(如 rt.jar 中的类),位于 JAVA_HOME/lib 目录下。自定义类加载器:可以自定义类加载器加载指定目录下的类。扩展类加载器(ExtClassLoader):加载扩展类库,位于 JAVA_HOME/lib/ext 目录下。应用程序类加载器(ExtClassLoader):加载用户类路径(ClassPath)下的类。准备:给类的静态变量分配内存,并赋默认值。加载:查找并加载类的字节码文件。
2025-03-11 14:44:45
354
原创 Springboot 启动流程
通过loadClass的方式,推测webApplicationType。比如,如果可以加载到javax.servlet.Servlet类,那么就是Servlet应用类型。ApplicationRunListener: 在启动过程中的各个节点发布不同的事件,可以实现该接口,在不同节点打印信息。从spring.factories中加载initializers和listeners。推测出main方法所在的类。
2025-03-08 16:52:03
465
原创 Spring MVC流程
Adapter处理请求时需要使用Resolver解析参数传递到方法中,方法执行后还需要使用HttpMessageConverter处理返回值转换。无注解对象类型参数:ModelAttributeMethodProcessor会先调用对象的无参构造器生成一个对象,然后会根据属性名称取param中取参数。Tomcat会先解析listener,根据配置spring.xml生成父容器,子容器可以使用父容器中的Bean。@RequestPart:将 multipart 请求中的文件或复杂对象绑定到方法参数。
2025-02-28 22:55:11
884
原创 Spring AOP简单总结
Spring的AOP是在Bean初始化完成之后(postProcessAfterInstantiation)通过bean的后置处理器处理。Spring中使用的生成代理对象的类,封装了JDK和CGLib。
2025-02-25 13:10:58
315
原创 Spring扩展点之Mybatis整合模拟
此外扫描时还有一个exclude/includeFilters的判断,Spring默认添加component注解进行扫描,因此我们可以在mapper上加注解就能扫描到,此外还有一个方法就是在扫描器添加includeFilter。此时还有一个问题就,就是mapper的代理逻辑是我们自己写的,不是用的MyBatis的。此时扫描出的mapper的BeanDefinition的class是它本身,并不是代理对象,因此还需要对beanDefinition做一些处理。工厂bean进行改造,增加构造器指定bean类型。
2025-02-22 15:49:45
429
原创 Spring扩展点实战-动态线程池
利用Spring的BeanDefinition实现系统自动读取配置,注册线程池Bean。现在动态线程池的基本功能已经完成。再利用@Import的导入功能,将这些Bean导入,无需在Bean加@Component。我们需要对线程池的线程有一些管理,所以建一个线程池的工具类,管理所有线程。我们想要对线程池的实时状态有感知,使用这个工具类对线程池状态进行查看和预警。系统的配置信息会被读取到environment中,因此通过实现EnvironmentAware来获取配置信息。利用工具类对线程池参数进行实时修改。
2025-02-20 11:41:36
218
原创 Sentinel使用及原理
浏览器访问:http://127.0.0.1:8090/order/query 后会在控制到出现资源,可以配置流控规则,通过指定的端口8999同步给客户端应用。查看ModifyRulesCommandHandler,规则写入处理需要实现WritableDataSource接口。官方实现基于nacos配置控制台规则推送(读数据源),监听nacos配置变化更新到内存中。mvc接口自动埋点,非mvc接口可以使用@SentinelResource标识资源。客户端添加控制台配置。
2025-02-12 09:31:20
396
原创 微服务演进
调用服务order和被调服务storage都需要接入注册中心,并且注册在同一个namespace和group才可以相互调用。引入nacos注册中心后,注册中心可以根据服务名拉取可用的服务ip列表,但是选取哪一台服务调用还要通过loadBalancer实现。Springboot项目,有order和storage两个服务,要在order服务中调用storage服务接口。问题:此时远程方法调用还需要通过url去调用,有没有可能调用远程服务像调用本地方法一样方便?使用RestTemplate发起远程服务调用。
2025-01-21 15:10:03
243
原创 sap系列-13增强
增强基于源代码的增强查找及实现增强的方式基于函数模块的增强(第二代)查找及实现增强的方式基于面向对象的增强classic BADI(第三代 BADI Business Add-in)查找及实现增强的方式基于面向对象的增强new BADI查找及实现增强的方式基于源代码的增强查找及实现增强的方式spro搜索“增强”在需要增强的程序中(系统->状态),显示对象列表,在包含文件夹中查找明证名称倒数第二个字符为Z的include程序中,或者在子例程中找UserExit_打头的子例程。系统会有预留,可以
2024-11-01 17:50:58
292
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人