
A1-jdk源码及设计
文章平均质量分 78
A1-源码及设计
乐之者v
快乐编程,一生编程。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Jdk动态代理源码
newProxyInstance() 方法返回指定接口的代理类实例,该代理类将方法调用分派给指定的调用处理程序(InvocationHandler)。为什么调用代理对象的方法,就会调用自定义的 MyInvocationHandler 中的 invoke()方法?实际上调用的是父类Proxy的 InvocationHandler h 的 invoke()方法。Proxy提供了创建动态代理类和实例的静态方法,它也是由这些方法创建的所有动态代理类的超类。示例中加入以下代码,会保存代理产生的类文件,方便查看。原创 2024-09-25 10:48:48 · 981 阅读 · 0 评论 -
AQS源码的简单理解
概念AQS全称 AbstractQueuedSynchronizer。AQS是一个并发包的基础组件,用来实现各种锁,各种同步组件的。它包含了state变量、加锁线程、等待队列等并发中的核心组件。ReentrantLock、Semaphore、CountDownLatch、FutrueTask,这些都是基于AQS构建的。而AQS是基于volatile变量的读/写和CAS( 也就是compa...原创 2019-12-16 23:40:00 · 53 阅读 · 0 评论 -
ReentrantLock源码简析
概念ReentrantLock,可重入锁。在多线程中,可以通过加锁保证线程安全。加锁和解锁加锁:public void lock() { sync.lock();}解锁public void unlock() { sync.release(1);}内部类Sync继承AQS(AbstractQueuedSynchronizer),因此可以维护状态变量sta...原创 2020-04-08 20:27:00 · 63 阅读 · 0 评论 -
java线程池源码的理解
线程池新建线程和切换线程的开销太大了,使用线程池可以避免频繁的创建和销毁线程,让创建的线程进行复用,节省系统资源。线程池的关键类:ThreadPoolExecutor。该类中包含了大量的多线程与并发处理工具,包括ReentrantLock、AtomicInteger、AQS、CAS、BlockingQueue等主要流程execute() –> addWorker() –>r...原创 2019-12-06 00:07:00 · 53 阅读 · 0 评论 -
ThreadLocal源码简解
一、ThreadLocalThreadLocal,线程副本变量。ThreadLocal,保证了每个线程都有独立的对象副本,保证了对象的唯一性,可以实现线程安全性。UML图如下所示:set(T value)调用ThreadLocal的set(T value)和get()方法时,内部会使用到一个ThreadLocalMap。/** * Sets the current thread'...原创 2020-01-14 13:50:00 · 52 阅读 · 0 评论 -
java集合: ArrayList源码浅析
ArrayList 是一个动态数组,线程不安全 ,允许元素为null。ArrayList的数据结构是数组,查询比较方便。ArrayList类的接口public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, j...原创 2019-02-17 21:45:00 · 129 阅读 · 0 评论 -
如何阅读jdk及开源框架的源码?
0.使用工具使用IDEA查看源码,并安装插件 translation,随时翻译源码中的注释。注释一定要多看,哪怕是英文的注释也必须看。很多的要点,其实都写在注释里面了!!!1.查阅资料可以先查看网络博客,参考前辈的心得体会进行阅读。2.理清主要流程先理清整体的架构设计,执行顺序。比如线程池ThreadPoolExecutor,主要的流程是 execute() –> addWo...原创 2017-12-05 22:55:00 · 79 阅读 · 0 评论 -
java集合: LinkedList源码浅析
LinkedList 数据结构是双向链表,插入删除比较方便。LinkedList 是线程不安全的,允许元素为null 。 构造函数:构造函数是空的。 /** * Constructs an empty list. */ public LinkedList() { }基本属性: //transient表示不会被序列化 //集...原创 2018-12-06 17:29:00 · 90 阅读 · 0 评论 -
java的Iterator源码浅析
在java的集合中,List接口继承Collection接口,AbstractList类实现了List接口,在AbstractList中的内部类Itr实现了Iterator接口ArrayList实现List接口并继承AbstractList类,结构图如下:(图片出自网络)Iterator接口源码:public interface Iterator<E> { bool...原创 2016-12-02 11:42:00 · 80 阅读 · 0 评论 -
java并发:jdk1.8中ConcurrentHashMap源码浅析
ConcurrentHashMap是线程安全的。可以在多线程中对ConcurrentHashMap进行操作。在jdk1.7中,使用的是锁分段技术Segment。数据结构是数组+链表。对比jdk1.7,在jdk1.8中,ConcurrentHashMap主要使用了CAS(compareAndSwap)、volatile、synchronized锁。跟jdk1.8中的HashMap一样,数据结...原创 2019-02-17 21:44:00 · 167 阅读 · 0 评论 -
java集合: jdk1.8的hashMap源码简单理解
HashMap的数据结构HashMap是数组+链表+红黑树(JDK1.8增加了红黑树部分)实现的,他的底层结构是一个数组,而数组的元素是一个单向链表。HashMap默认初始化的是一个长度为16位的数组,每个数组储存的元素代表的是每一个链表的头结点。在jdk1.8中,当HashMap不断地插入元素,导致链表太长时,会将链表转换为红黑树。Node<K,V>Node是HashMap...原创 2019-02-17 21:45:00 · 51 阅读 · 0 评论 -
SpringMVC上传文件的MultipartFile源码
零.MultipartFile上传文件的具体实例如下:http://blog.youkuaiyun.com/swingpyzf/article/details/20230865一.具体类和方法上传文件主要方法是transferTo(),可以将某个文件复制保存到新的路径中。Multipart接口的实现类CommonsMultipartFile类,有个保存文件到新路径的方法transferTo(),调用...原创 2017-11-08 15:36:00 · 248 阅读 · 0 评论