- 博客(14)
- 收藏
- 关注
原创 springcloud五大组件之熔断器
springcloud五大组件之熔断器@Configuration( proxyBeanMethods = false)@ConditionalOnClass({Hystrix.class, HealthIndicator.class, HealthContributorAutoConfiguration.class})@AutoConfigureAfter({HealthContributorAutoConfiguration.class})public class HystrixAut
2021-05-17 16:23:04 584
原创 spring cloud五大组件之Eureka注册中心
spring cloud五大组件值Eureka注册中心一、原理 ---------------------------还缺个覆盖状态 Eureka注册中心用于服务的注册和发现,即是将服务信息注册到存储微服务信息的服务器,进行微服务调用时再取得服务相关信息进行调用。根据功能进行分类:服务注册、服务续约、服务下线。为保证服务的高可用,可进行集群部署,增加服务的同步功能。保证高可用性防止因网络问题造成的服务集体下线增加服务的自我保护功能。我们根据这些功能来看下具体的实现。二、注册和发现的实现 1)、服
2021-05-17 16:21:59 477
原创 Spring框架探索三(Bean的注入)
一、Spring注入流程如下所示。二、注入流程具体代码finishBeanFactoryInitialization自动注入Beanprotected void finishBeanFactoryInitialization(ConfigurableListableBeanFactory beanFactory) { // 将conversionservice实例化并加入到工厂 if (beanFactory.containsBean(CONVERSION_SERVICE_BEAN
2021-01-17 18:14:51 308
原创 Spring框架探索二(BeanDefinition的扫描注册)
一、下图为简单的扫描注入过程时序图二、扫描注入过程具体代码 spring的依赖注入是从SpringApplication的refreshContext(context)方法开始,具体流程如下;@Overridepublic void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { // 刷新前准备,close和active标
2021-01-17 18:13:31 283
原创 Spring框架探索一 (springboot配置环境)
Spring框架探索: spring作为一款轻量级的java开发框架,以其优越的特性被广泛使用在各个项目中。它主要提供两个功能IOC、AOP控制反转(依赖注入)和切面,极大的简化了工作者的开发工作。可它是如何工作的以及设计思路如何?接下来我们一起来探索。 spring boot的启动以添加了SpringBootApplication注解的类的SpringApplication.run方法开始。//自动扫描注解@SpringBootApplication(scanBasePackages="com
2021-01-17 18:10:45 306 2
原创 AQS的具体实现二:CountDownLatch与CyclicBarrier的具体实现
AQS的具体实现二:一、简介 CountDownLatch(线程计数器)与CyclicBarrier(可重复使用的栅栏),线程计数器和循环栅栏是两个用来进行同步的类,都是通过await方法来进行线程的阻塞,当执行线程数达到具体的数量时才会执行释放阻塞队列的方法,都是依赖于AbstractQueuedSynchronizer框架进行实现,存在于java.util.concurrent包下。二、区别 1、但CountDownLatch内部Sync通过实现AbstractQueuedSynchroni
2020-12-13 21:20:56 128
原创 AQS的具体实现一:ReentrantLock
AQS的具体实现一:ReentrantLock AQS的实现有多种形式,包括ReentrantLock、CountDownLatch、CyclicBarrier、ReentrantLock、Semaphore和ThreadPoolExecutor。ReentrantLock 可重入的独占锁:可重入指同一线程可以多次进入此锁,独占表示同一时刻只能够有一个线程持有该锁。其实现方式又有两种,分为公平和非公平锁。 非公平和公平锁:如下图,我们能看到其内部有两个实现类,公平锁与非公平锁。[外链图片转存失败,
2020-12-13 21:17:50 383
原创 AQS抽象队列同步框架
AQS一、AQS抽象队列同步框架:java中实现锁机制的形式有两种,一种是通过syschronized关键字来实现,另外一种既是通过抽象线程同步框架来实现。syschronized通过修改字节码加入监视器类来实现最终会调用cpu的锁来实现。而AQS是通过双向队列+volatile关键字来实现,相对syschronized其免去了字节码层面的修改,不用调用cpu的锁来实现,加锁释放锁更加的快捷,避免调用cpu锁导致的资源浪费。二、原理 1.属性 //共享锁标志 static final Node
2020-12-02 19:42:47 71
原创 重量级锁synchronized关键字
重量级锁synchronized关键字一、synchronized的作用1.可见性:synchronized关键字在线程解锁前必须把变量同步回主内存,在线程加锁前必须从主内存中重新获取最新的值。2.原子性:synchronized关键字保证每一个时刻只能一个线程持有该同步块,来保证其原子性。3.有序性:synchronized通过一个时刻只允许一个线程执行同步块,即使指令进行重排序仍旧不影响结果。它不会禁止指令重排序,为保证指令重排序最好的方法是禁止处理器优化和指令重排序。4.可重入行:synch
2020-11-28 00:36:17 159
原创 从volatile关键字到总线风暴
volatile关键字一、计算机内存模型 计算机执行是指计算机内一系列指令在cpu中执行的过程,在指令执行过程中会涉及到内存中数据的读写,这时如果直接进行读写相对于cpu指令执行而言是非常耗费时间的。针对这种情况计算机会在cpu中开辟一片区域(高速缓存),通过高速缓存进行数据的读取就会快很多。但是在多线程中这种情况就会存在问题,多个线程之间的高速缓存数据不可见,与内存中数据不一致等情况。这时计算机通过缓存一致性行协议与主线lock锁方式来保证高速缓存一致性问题。二、java中并发编程的三个概念:1
2020-11-26 23:52:00 1282
原创 源码解析MyBatis缓存
MyBatis缓存说到MyBatis缓存我们应该知道其分为一级缓存和二级缓存,一级缓存对应sqlsession二级缓存对应namespace,缓存在进行增删改时进行刷新。但是具体对应源代码你知道是如何进行刷新的吗?我们一起来看下源代码。MyBatis的查询起始于DefaultSqlSession的select,这里我们能看到DefaultSqlSession将查询交给执行器进行查询,这里查询的方法有多个,但是大同小异最终都是交给执行器,这里以select方法为例进行查看。@Overridepubli
2020-09-24 18:06:54 146
原创 跟着源码看lcn分布式事务
跟着源码看lcn分布式事务lcn分布式事务具体实现思路是服务器A创建事务,构建事务信息并将事务信息发送到事务处理器,处理过程中可能用到服务器B、C,会将事务组Id传给B、C,B、C业务处理完成后将事务信息加入到对应的事务组,并且创建一个线程对事务组状态进行检测A事务处理完成后向服务其发送的事务状态,B、C会根据监督的状态判断对事务进行具体的提交或者回滚操作。分布式事务流程图[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NyihZtTb-1599798657128)(C:
2020-09-11 12:32:11 1054 2
原创 跟着源码看线程池Executors
线程池ExecutorsExecutors中常见线程池的类型:newFixedThreadPool(int nThreads) 固定长度线程池,只有一个参数,用来指定核心线程数和最大线程数,核心线程数和最大线程数是相同大小。构造方法new ThreadPoolExecutor(nThreads, nThreads,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>());newWorkStealingPool()这里使
2020-09-09 15:23:36 143
原创 玩转HashMap
玩转HashMap HashMap相对于其他的集合具有更高的复杂度,涉及到了数组、链表、红黑树相关知识,HashMap之所以复杂,不仅是因为它复杂的数据结构,而且它不同数据结构之间的转换也是非常复杂。在链表和红黑树进行转换时涉及到阈值问题,初始化时也会涉及到多个初始化参数如DEFAULT_INITIAL_CAPACITY、MAXIMUM_CAPACITY等,具体参数如下。 //初始容量,初始化时容量。默认值为16 static final int DEFAULT_INITIAL_CAPACIT
2020-09-09 15:21:09 424
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人