
Java源码分析
Mutou_ren
这个作者很懒,什么都没留下…
展开
-
Cglib动态代理的底层原理
使用 老规矩,先回忆一下怎么使用cglib的动态代理 写一个方法拦截器作为回调 创建Enhancer并设置父类和回调 使用Enhancer创建代理类 public class MyMethodInterceptor implements MethodInterceptor { @Override public Object intercept(Object o, Method ...原创 2020-03-04 22:22:52 · 702 阅读 · 0 评论 -
基于Javassist实现JDK的动态代理Proxy
使用 首先复习一下怎么使用动态代理 定义一个用户接口 实现一个用户接口的实现类 实现一个InvocationHandler 使用Proxy.newProxyInstance创建一个代理即可使用 public interface SayHelloInterface { void addMessage(String msg,String from,String to); Strin...原创 2020-03-04 21:00:42 · 535 阅读 · 0 评论 -
【Java源码解析第一篇】List
首先先来看一下继承结构图: 如图所示为List的继承关系结构图。由图可知,Java的Collection集合类采用了设计模式里的模板模式——接口定义方法,抽象类实现基础通用功能,具体实现类继承抽象类并进行功能的自定义实现。 Collection接口 Collection接口定义了Java集合类的通用方法,如元素的添加、删除等方法,其方法列表可见下图。由于接口只是方法定义,其重要之处在于设计理念,...原创 2019-05-10 22:16:59 · 214 阅读 · 1 评论 -
【Java源码解析第二篇】队列
ArrayQueue 双向无界队列,最大亮点在于其头节点并非一定是数组第0个元素,而是通过首尾指针来指定,即数组中任何一个位置都可能是头结点。可以参考一下两篇: 参考文献 参考文献 PriorityQueue 使用数组存储元素,只能接受拥有比较器的元素。 数据结构为小顶堆。插入节点时会与当前节点的父节点进行比较维持小顶堆的特性。弹出时直接弹出堆顶元素即可,弹出后将尾节点移到堆顶补位并逐个与子节点进...转载 2019-05-10 22:36:51 · 119 阅读 · 0 评论 -
自己写阻塞队列实现消费者与生产者
阻塞队列的特点就是: 若队列内无元素,get操作会进入阻塞状态 若队列已满,set操作会进入阻塞状态 JDK中提供了七种阻塞队列供我们使用,搞明白了原理后自己手写一个简易版的阻塞队列。 public class MyBlockingQueue { private LinkedList<Integer> objects=new LinkedList<Integer>...原创 2019-05-24 13:33:34 · 305 阅读 · 0 评论 -
WeakHashMap
参考了网上不少的文章,总结如下: WeakHashMap实现大部分与1.7版本的HashMap相同,但WeakHashMap中的Entry继承了WeakReference,key为弱引用。 弱引用对象在发生GC时会被回收,因此key被回收后会进入到ReferenceQueue中,注意这里回收的其实只是key,value没有被回收。 WeakHashMap的get()、put()等方法都直接或间接调...原创 2019-05-13 17:17:46 · 155 阅读 · 0 评论