自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 BlockingQueue

BlockingQueueBlockingQueue接口继承自Queue接口,在Queue的基础上增加了等待操作,简单来说就是获取元素时队列如果是空的,等待,插入元素时,队列已经满了,等待。public interface BlockingQueue<E> extends Queue<E> { boolean add(E e); boolean offer(E e); void put(E e) throws InterruptedException

2021-05-28 19:28:42 193

原创 DelayQueue源码分析

DelayQueueDelayQueue是一个无界的阻塞队列,它的元素实现了Delayed接口,并且元素只有在delay到期以后才能取出。队列头是延迟过期时间最长的元素,如果没有元素过期,执行poll()方法返回null。案例首先定义一个实现Delayed接口的泛型类MyDelayNode,Delayed接口继承了Comparable接口。public class MyDelayNode<T> implements Delayed { private int delay; /

2021-05-28 19:25:33 251

原创 LinkedBlockingQueue源码分析

LinkedBlockingQueue基于单向链表的可选有界队列先来看一下定义的字段。//单向链表节点的静态内部类static class Node<E> { E item; Node<E> next; Node(E x) { item = x; }}/** The capacity bound, or Integer.MAX_VALUE if none */private final int capacity;/** Current

2021-05-28 19:24:00 185

原创 ArrayBlockingQueue源码分析

ArrayBlockingQueueArrayBlockingQueue基于数组原理实现的,有界的,一旦创建边界是不能改变的。可以使用公平的策略在等待的消费者和生产者中。源码先来看类中定义的几个字段/** The queued items */final Object[] items;/** items index for next take, poll, peek or remove */int takeIndex;/** items index for next put, offer

2021-05-28 19:22:38 104

原创 Queue接口

QueueQueue是队列接口,它的主要特点是先进先出,就是排队嘛。Queue接口有两个重要的子接口Deque和BlockingQueue,这里只介绍Queue接口的直接是实现,Deque和BlockingQueue接口的实现单独介绍。public interface Queue<E> extends Collection<E> { boolean add(E e); boolean offer(E e); E remove(); E p

2021-05-24 08:08:01 168

原创 PriorityQueue源码分析

PriorityQueue从名字上来看,PriorityQueue叫做优先队列,它的另一个名字叫堆(heap),这个名字更熟悉。它和普通的队列不太一样,它里面存储的元素具有一定的顺序性,而不是简单的“先进先出”。它的实现原理通常是二叉堆,二叉堆是一个完全填满的二叉树。这里不做过多的介绍,都是数据结构的知识。来介绍一下优先队列的通常实现。优先队列的整体结构虽然是一个二叉堆,也是树结构,但是存储元素的却是用数组实现的,不是通常用链表作为树的节点。因为这里隐含着一个规律,用数组的索引可以很轻松的获取它的父节点

2021-05-24 08:03:06 193

原创 LinkedHashMap原理分析

LinkedHashMap原理分析LinkedHashMap被称作“有序的Map”,作为对比HashMap被称作“无序的”。这里说的“有序”,“无序”到底什么意思?怎样实现的,来研究一下。案例在学习源码之前,先来看两个小测试案例。@Testpublic void testHashMap() { Map<String, String> map = new HashMap<>(); map.put("caocao", "孟德"); map.put(

2021-05-19 19:22:02 172

原创 HashMap源码分析

HashMapHashMap时实现Map接口的Hash表,是Java语言中最常用的集合类之一,再数据结构中叫做“散列表”。我们集合散列表实现原理以及Java的HashMap源码来仔细分析一下。散列表在数据结构中散列表有几种实现方法,在介绍实现方法之前先来说一下散列函数。散列表数据结构就是包含键值对的固定大小的数组。每一个键被映射到数组的一个位置。字符串(键)与数组索引的对应关系就是散列函数。散列函数演做到尽量的平均分散,尽量保证键值均匀的分布在数组中。但是可以想象,需要对应的键数量超过数组长度是,肯

2021-05-14 09:08:54 132

原创 ArrayList,LinkedList,Vector,CopyOnWriteArrayList对比

ArrayList,LinkedList,Vector,CopyOnWriteArrayList对比ArrayList,LinkedList,Vector,CopyOnWriteArrayList都是List接口的实现类,List接口是有序集合,可以精确的控制在那个位置插入元素,可以通过索引位置访问元素。但是这几实现类的实现原理完全不同,分别介绍一下。ArrayListLinkedListVectorCopyOnWriteArrayList结论ArrayList,LinkedList,Ve

2021-05-11 14:04:19 167

原创 CopyOnWriteArrayList源码分析

CopyOnWriteArrayList源码分析特性底层采用数组存储元素线程安全源码查看一下关键的源码实现逻辑。/** The lock protecting all mutators */final transient ReentrantLock lock = new ReentrantLock();/** The array, accessed only via getArray/setArray. */private transient volatile Object[] ar

2021-05-11 13:57:04 127

原创 Vector源码分析

Vector特性Vector集合也实现了List接口,是一个古老的集合类,现在用的比较少,他与ArrayList唯一的区别在于,他线程安全,看源码知道他的大部分方法添加了synchronized修饰。所以保证了线程安全,也同时导致了性能比较差,我们再使用线程安全的List集合时,现在一般使用CopyOnWriteArrayList。源码基本与ArrayList一致,ArrayList源码分析这里我只看一个方法,对于集合的get方法来说,是允许多线程并发访问的,但是这里同样添加了synchronize

2021-05-10 18:56:08 95

原创 LinkedList源码分析

LinkedList双向链表实现的List和Queue接口,允许插入null。特性双向链表机制实现了List和Deque接口的集合允许元素为null所有特性都是基于链表的,增删快,查找慢线程不安全源码分析内部定义了一个存储数据元素的双向节点数据结构,这是一个内部类。private static class Node<E> { E item; Node<E> next; //后一个节点指针 Node<E> prev; //前

2021-05-10 18:52:23 100

原创 ArrayList源码分析

ArrayList可扩容数组原理的List实现类,实现类所有的List接口方法,并且允许插入null。Java语言中最常用的集合类。源码分析ArrayList元素实际上保存在一个名字为elementData的Objec类型的数组内无参构造器实例化时,elementData为{},默认的容量为10第一次添加元素时,会先扩容public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments modCount

2021-05-10 18:47:25 119 2

原创 SpringBoot启动流程详细分析

SpringBoot启动流程详细分析1.写在前面SpringBoot框架作为Java开发领域最常用的框架,没有之一。今天就来扯一下实现原理,我们主要关注的时整个框架的启动流程,尤其是Web应用的启动。SpringBoot是基于Spring框架的注解来实现的,SpringBoot程序的启动会调用Spring框架本身的一系列创容器,刷新容器等步骤,真是Spring本身的知识,不再这篇详细介绍,大家可以看一下spring源码深度分析,里面比肩详细的介绍了Spring框架的启动分析。以下的源码是基于Sprin

2021-03-27 21:22:31 519

原创 @AliasFor注解详细说明

@AliasFor注解详细说明@AliasFor是Spring框架的一个注解,用于声明注解属性的别名。它有两种不同的应用场景。注解内的别名元数据的别名两者主要的区别在于是否在同一个注解内。1.注解内的别名我们先来看一下@AliasFor的源码@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)@Documentedpublic @interface AliasFor { /** * Alias f

2021-03-19 22:14:12 16162 7

原创 Spring框架AOP源码分析

Spring框架AOP源码分析1.写在前面做java开发的不可能不适用spring框架,我们都知道spring框架的两个基础功能就是Ioc和aop,相比来说Ioc会应用的更广泛一些,但aop同样重要,今天就来详细分析一下spring的aop的实现原理,会深入spring源码级别,对于spring不太熟悉的同学来说可能有点难,没有办法,分析源码就是这样,需要对框架有一定的应用经验并且比较熟悉原理,毕竟一个成熟的框架,特别是像spring这样的java技术栈统治级的框架。如果想学习spring的基本功能推荐

2021-03-16 09:37:21 187

原创 @Import注解详细分析

@Import注解详细分析1.写在前面其实@Import只是Spring框架的注解之一,但是作用一点都不小,尤其是在Springboot中,源码中很多地方都使用到,本来这篇应该放在spring源码深度分析中,无奈,那篇是在太长了,只能单独扯出一篇,真是越学习越感觉出了Spring框架的强大!好了,废话不扯,圆规正传。先搭建环境。2.搭建环境<dependencies> <dependency> <groupId>org.springfram

2021-03-13 22:25:44 549 2

原创 HTTPS原理

HTTPS原理1.HTTP与HTTPS我们都知道互联网上的web通信协议是http协议,那https是什么呢?简单来说https就是安全的http协议。http是应用层协议,它是基于tcp/ip协议的,tcp/ip是传输层协议,而https就是在应用层和传输层之间加了一个ssl层,保证了网络的安全可靠。2.SSLssl是一种安全协议,并不是https独有的,其他应用层的协议也可以使用基于ssl的加密,在说明ssl之前先简单介绍下主要的两种加密方式。对称加密:加密和解密使用同一个密钥非对

2021-03-11 10:25:31 125 2

原创 String,StringBuilder,StringBuffer区别

String,StringBuilder,StringBuffer区别1.练习public static void main(String[] args) { String str1 = "xxxx"; //1 String str2 = "xxxx"; String str3 = new String("xxxx"); //3 String str4 = "" + st

2021-03-10 14:21:28 76

原创 spring源码深度分析

spring源码深度分析1.写在前面本文是对spring源码的深度分析,阅读起来有一定难度,如果对spring应用不太熟练的话,更是难上加难。分析源码是一件枯燥乏味的事情,需要极大的耐心,在这篇的时候也是经历了很大的痛苦,耗费很大精力。本文很长,我知道不会有很多人看到最后,但是我相信看到最后的一定能有所收获。阅读本文章要对照源码,最好是版本也一致,文章不会贴出所有的源码细节,并且文章不具备跳转,调试的条件,这在集成开发环境是很方便的。2.搭建环境新建maven工程,引入如下依赖即可<depe

2021-03-04 08:50:18 7406 2

原创 spring的ApplicationEvent事件监听机制原理与应用

spring的ApplicationEvent事件通知机制原理与应用spring框架抽象出了一套事件机制,通过发布,订阅方式来实现,类似观察者模式。先来搭建一个基本的spring环境,然后做个简单的案例演示事件的应用,最后在做源码分析。1.环境搭建引入依赖<dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId&

2021-02-05 19:53:32 2196

原创 Spring的Aware机制原理与应用

spring的Aware机制原理与应用spring的Aware在spring框架内部应用的很广泛,学习spring源码时候,经常会发现某个类实现了xxxAware接口。实现xxxAware接口的类其实就是为了能获取相对应的spring对象。今天就来说一下,Aware的是实现原理。1. 环境搭建引入依赖<dependency> <groupId>org.springframework</groupId> <artifactId>sprin

2021-02-02 09:43:48 1713

原创 BeanPostProcessor后置处理器原理与应用

BeanPostProcessor后置处理器原理与应用BeanPostProcessor又叫后置处理器,是spring框架极其重要的概念。本身是个接口,接口里面定义了两个方法。许多扩展功能都是基于这种后置处理器的方式来实现的。spring框架会自动识别所有实现BeanPostProcessor接口的实现类,加载到容器中。当容器实例化完具体的一个bean后,会遍历所有实现接口的类,执行接口的实现方法,对刚刚实例化的bean进行初始化操作。这只是最简单的应用,BeanPostProcessor还有几个子接口

2021-02-01 09:38:04 1387 2

原创 BeanFactoryPostProcessor与BeanDefinitionRegistryPostProcessor用法与原理

BeanFactoryPostProcessor与BeanDefinitionRegistryPostProcessor用法与原理BeanFactoryPostProcessor和BeanDefinitionRegistryPostProcessor都是接口,BeanDefinitionRegistryPostProcessor是BeanFactoryPostProcessor的子接口。实现类用来修改Spring容器的beanDefinition行为的,注意这里的两个不是bean的后置处理器,可以称为be

2021-01-27 19:58:52 995

原创 Spring处理循环依赖原理

Spring处理循环依赖原理大家都清楚Spring框架实现类Ioc,即实现了依赖的自动注入,这是Spring的基本功能之一,并且对于循环依赖,Spring也可以自动注入,但是前提是存在循环依赖关系的Bean必须是单例的,原型的不可以。1.什么是循环依赖简单来说就是两个类的相互引用,举个例子来说,A类定义一个B类的实例字段,B类也定义一个A类的实例字段。class A{ @Autowired private B b; //省略get,set方法}cla

2021-01-27 11:12:43 509

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除