JAVA源码分析
文章平均质量分 88
HelloWorld_EE
这个作者很懒,什么都没留下…
展开
-
Spring 是如何将前端请求中的参数解析到指定对象的
Spring 是如何将前端请求中的参数解析到指定对象的注:文章稍微偏源码,对照着源码debug看效果更好一点。先说下背景,最近看一个项目,有一个接口的定义如下@PostMapping(value = "/conditionConfig")public BaseResponse<PageInfo<ConfigDTO>> conditionConfig(@Valid @RequestBody ConfigQuery configQuery) { return config原创 2020-12-05 23:21:51 · 2465 阅读 · 0 评论 -
《Java源码分析》:Java NIO 之 Buffer
《Java源码分析》:Java NIO 之 Buffer在上篇博文中,我们介绍了Java NIO 中Channel 和Buffer的基本使用方法,这篇博文将从源码的角度来看下Buffer的内部实现。在Java API文档中,对Buffer的说明摘入如下:Buffer:是一个用于特定基本数据类型的容器。这里的特定基本数据类型指的是:除boolean类型的其他基本上数据类型。缓冲区是特定基本数据类型元素原创 2016-10-10 10:46:26 · 4171 阅读 · 2 评论 -
《Java源码分析》:CyclicBarrier(part one)
《Java源码分析》:CyclicBarrier (part one)CyclicBarrier字面意思回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用。我们暂且把这个状态就叫做barrier,当调用await()方法之后,线程就处于barrier了。举个例子哈:当我们10个人相约包车去成都玩,车早上就原创 2016-08-08 22:43:03 · 2270 阅读 · 2 评论 -
《Java源码分析》:ThreadLocal /ThreadLocalMap
《Java源码分析》:ThreadLocal /ThreadLocalMap首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set(Object obj) 到线程中的对象obj是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。各个线程中访问的是不同的对象。 线程局部变量(ThreadLocal)其实的功用非常简单,就是为每一个原创 2016-08-31 21:19:03 · 2542 阅读 · 1 评论 -
《Java源码分析》:线程池 ThreadPoolExecutor
《Java源码分析》:线程池 ThreadPoolExecutorThreadPoolExecutor是ExecutorService的一张实现,但是是间接实现。ThreadPoolExecutor是继承AbstractExecutorService。而AbstractExecutorService实现了ExecutorService接口。在介绍细节的之前,先介绍下ThreadPoolExecut原创 2016-08-06 14:20:29 · 2208 阅读 · 2 评论 -
《Java源码分析》:CyclicBarrier(part two)
《Java源码分析》:CyclicBarrier(part two)在上篇博文中http://blog.csdn.net/u010412719/article/details/52156588,我们看了关于CyclicBarrier应用的一些例子,也得出的使用CyclicBarrier时的相关结论。回顾下我们在上篇博文中了解了关于CyclicBarrier的相关知识点如下:1、CyclicBarri原创 2016-08-09 10:31:33 · 923 阅读 · 2 评论 -
Executors类中创建线程池的几种方法的分析
Executors类中创建线程池的几种方法的分析要配置一个线程池是比较复杂的,尤其是对于线程池的原理不是很清楚的情况下,很有可能配置的线程池不是较优的,因此在Executors类里面提供了一些静态工厂,生成一些常用的线程池。1、newFixedThreadPool:创建固定大小的线程池。线程池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程。 /*原创 2016-09-09 18:39:54 · 5763 阅读 · 0 评论 -
《Java源码分析》:PriorityQueue
《Java源码分析》:PriorityQueue看了PriorityBlockingQueue的源码之后,发现这个类的实现是基于二叉堆来实现的,然而自己以前对二叉堆基本上没有认真的研究过,这是自己第一次看到关于二叉堆的“插入元素”、“取出元素”等相关操作的一个具体实现。于是,想想,PriorityQueue里面的内部实现也应该是这样的,因此也就看了下PriorityQueue的源码,下面一点点的进行原创 2016-08-29 18:31:49 · 2404 阅读 · 0 评论 -
《Java源码分析》:ConcurrentHashMap JDK1.8
《Java源码分析》:ConcurrentHashMap JDK1.8最近一直在看关于J.U.C中的源码,了解原子操作,了解锁机制,了解多线程并发等等。但是ConcurrentHashMap一直拖着到今天才算告一段落。也要感谢ConcurrentHashMap这个类,刚开始就是想弄懂里面的工作原理,但是,无奈看了网上关于介绍ConcurrentHashMap这个类的资料或博客都是基于JDK1.8以原创 2016-08-07 21:42:41 · 19477 阅读 · 28 评论 -
《Java源码分析》:BlockingQueue之PriorityBlockingQueue
《Java源码分析》:BlockingQueue之PriorityBlockingQueue上面两篇博文分别介绍了BlockingQueue、ArrayBlockingQueue和LinkedBlockingQueue。这篇博文就来分析下PriorityBlockingQueue。1、PriorityBlockingQueue的继承体系结构 public class PriorityBlock原创 2016-08-28 22:49:39 · 1351 阅读 · 0 评论 -
《Java源码分析》:BlockingQueue之LinkedBlockingQueue
《Java源码分析》:LinkedBlockingQueueLinkedBlockingQueue是大小不定的BlockingQueue,若其构造函数带一个规定大小的参数,生成的BlockingQueue有大小限制,若不带大小参数,所生成的BlockingQueue的大小由Integer.MAX_VALUE来决定.其所含的对象是以FIFO(先入先出)顺序排序的。1、LinkedBlockingQue原创 2016-08-28 11:15:30 · 794 阅读 · 0 评论 -
《Java源码分析》:Future、RunnableFuture、FutureTask
《Java源码分析》:线程池 Future、RunnableFuture、FutureTask在使用ThreadPoolExecutor使用submit提交任务后然后交给线程池中的线程去执行,是吧在ThreadPoolExecutor(其实是在AbstractExecutorService中)有如下几个submit方法, public Future<?> submit(Runnable ta原创 2016-08-06 17:01:45 · 4794 阅读 · 0 评论 -
《Java源码分析》:BlockingQueue之ArrayBlockingQueue
《Java源码分析》:BlockingQueue2016年8月27日21:10:51,今天是学校报道的第一天,从今天开始,我也就研三了,哎,有时候只能感叹时间过的真快,自己的研究生生活只剩下最后一年。在最后的一年里,希望自己的一切都顺利吧,其中包括:找一份好的工作,顺利将手上的项目完成,顺利完成自己的毕设。说了这么多,还是开始本篇博文的正题吧。在前一段时间研究了下J.U.C包下面并发类库的原理,也都原创 2016-08-27 22:30:55 · 2172 阅读 · 0 评论 -
《Java源码分析》:TreeMap
《Java源码分析》:TreeMap今天把TreeMap的源码稍微看了下,TreeMap的内部是基于红黑树来完成的。由于红黑树确实在我们的实际编码过程中用的比较少,因此自己对红黑树的认知不是很深,只是稍微有点印象罢了。由于TreeMap是基于红黑树来完成,因此 ,首先先列出红黑树的5个性质:性质 1:每个节点要么是红色,要么是黑色。性质 2:根节点永远是黑色的。性质 3:所有的叶节点都是空节点(即原创 2016-09-03 21:24:47 · 1029 阅读 · 0 评论 -
《Java Fork/Join框架介绍》
《Java Fork/Join框架介绍》Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。我们已经很清楚Fork/Join框架的需求了,那么我们可以思考一下,如果让我们来设计一个Fork/Join框架,该如何设计?这个思考有助于你理解Fork/Join框架的设计。第一步肯定是将大任务分割成小任务。首原创 2016-09-16 20:10:09 · 914 阅读 · 0 评论 -
TreeSet源码分析
TreeSet源码分析功能:将Set中的元素按照一定的规则进行排序存储。在其源码的内部实现中(如下),可以看到TreeSet时借助了TreeMap来实现的。 public TreeSet() { this(new TreeMap<E,Object>()); } TreeSet(NavigableMap<E,Object>...原创 2018-05-13 19:02:18 · 1027 阅读 · 0 评论 -
《Java源码分析》:HashMap
《Java源码分析》:HashMap看过很多次HashMap的源码了,但是,每次都没有做记录,因此,每次记忆都不太深,今天在看别人博客时提到Hashtable是线程安全的,Hashtable中的方法都用了synchronized进行了同步,于是就看了下Hashtable的源码,在看的过程中,写了篇博客,现在2016年7月20日22:03:53,还在教研室,感觉回寝室还早,因此,决定再看下HashMa原创 2016-07-21 10:59:03 · 6391 阅读 · 4 评论 -
《Java8 Stream介绍》
《Java8 Stream介绍》1、为什么需要 StreamStream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。Java 8 中的 Stream 是对集合(Collection)原创 2016-12-08 21:14:23 · 1973 阅读 · 0 评论 -
《Java NIO》:Channel and Buffer (通道和缓冲区)
《Java NIO》:Channel and Buffer (通道和缓冲区)从今天开始,自己将会了解下Java NIO的相关知识,以及会看下相关的类库源码。和往常自己学习新知识之前,自己都会阅读网上的一些博文和资料,以使自己对这一块的知识有一个大致的了解,然后再按照自己感兴趣的点来研究一点点知识。关于Java NIO这一块的知识,也是如此。关于Java NIO涉及到三个重要的概念:1、Chan原创 2016-10-08 19:46:07 · 3591 阅读 · 2 评论 -
《Java 源码分析》:Java NIO 之 SelectionKey
《Java 源码分析》:Java NIO 之 SelectionKey在ServerSocketChannel源码分析中我们知道当把一个channel注册到指定的Selector上时, 实际上就是将(channel,selector)封装成了一个SelectionKey对象,并将此对象保存在了Selector对象中。SelectionKeyImpl k = new SelectionKeyImp原创 2016-10-19 21:45:17 · 6781 阅读 · 1 评论 -
《Java 源码分析》:Java NIO 之 ServerSocketChannel
《Java 源码分析》:Java NIO 之 ServerSocketChannel在上两篇博文中,主要从源码的角度粗略的介绍了Selector.open()和selector.select()方法的内部实现。由于Selector和ServerSocketChannel、SocketChannel配合使用,因此,有必要了解ServerSocketChannel、SocketChannel的内部实现原创 2016-10-19 20:46:55 · 4997 阅读 · 2 评论 -
《Java 源码分析》:Java NIO 之 Selector(第二部分selector.select())
《Java 源码分析》:Java NIO 之 Selector(第二部分selector.select())上篇博文《Java 源码分析》:Java NIO 之 Selector(第一部分Selector.open())从源码的角度主要介绍了Selector.open()这个方法背后主要做了什么,发生了什么。本篇就是第二部分:从源码的角度来看下selector.select()背后做了些什么,怎么做原创 2016-10-14 21:39:22 · 10903 阅读 · 5 评论 -
《Java 源码分析》:Java NIO 之 Selector(第一部分Selector.open())
《Java 源码分析》 :Java NIO 之 Selector(第一部分Selector.open())关于Selector类主要涉及两个重要的方法,如下:1、Selector.open()2、select()由于篇幅限制,这篇主要从源码的角度来介绍Selector selector = Selector.open()背后主要做了什么,发生了什么。Selector类中的open()源码如下原创 2016-10-13 20:09:16 · 16172 阅读 · 3 评论 -
Java NIO 之 Selector
Java NIO 之 Selector这篇博文将来记录下自己Java NIO中另一个重要的东西—-Selector。关于Selector确实不太好理解,自己也看了很多博客,到目前为止,自己对Selector还是没有弄清楚,感觉模模糊糊的。最主要的可能是没有找到对应的应用场景,不知道在上面地方能够用到Selector。关于Selector的相关介绍,并发编程网的这篇博文介绍的比较好:http:/原创 2016-10-10 21:47:29 · 1368 阅读 · 0 评论 -
Java NIO 之 ServerSocketChannel SocketChannel
Java NIO 之 ServerSocketChannel/SocketChannelServerSocketChannel介绍Java NIO中ServerSocketChannel是一个可以监听新进来的TCP 连接的通道。既然是监听新的TCP连接,因此ServerSocketChannel一般用于服务器端,与Socket网络编程中的ServerSocket功能类似。在一般的编程实现的逻辑原创 2016-10-10 21:46:07 · 1674 阅读 · 0 评论 -
《Java源码分析》:Timer/TimerTask
《Java源码分析》:Timer在JDK 5.0之前,java.util.Timer/TimerTask是唯一的内置任务调度方法,而且在很长一段时间里很热衷于使用这种方式进行周期性任务调度。本篇博文就先使用Timer/TimerTask来完成任务的调度。接着再来分析Timer/TimerTask的源码。Timer类中常见方法1、void cancel() 终止此计时器,丢弃所原创 2016-08-05 22:06:03 · 2538 阅读 · 2 评论 -
《Java线程池》:任务拒绝策略
《Java线程池》:任务拒绝策略在没有分析线程池原理之前先来分析下为什么有任务拒绝的情况发生。这里先假设一个前提:线程池有一个任务队列,用于缓存所有待处理的任务,正在处理的任务将从任务队列中移除。因此在任务队列长度有限的情况下就会出现新任务的拒绝处理问题,需要有一种策略来处理应该加入任务队列却因为队列已满无法加入的情况。另外在线程池关闭的时候也需要对任务加入队列操作进行额外的协调处理。Rejecte原创 2016-08-05 21:08:26 · 20880 阅读 · 2 评论 -
《Java困惑》:多并发情况下HashMap是否还会产生死循环
《Java困惑》:多并发情况下HashMap是否还会产生死循环今天本来想看下了ConcurrentHashMap的源码,ConcurrentHashMap是Java 5中支持高并发、高吞吐量的线程安全HashMap实现,在看很多博客在介绍ConcurrentHashMap之前,都说HashMap适用于单线程访问,这是因为HashMap的所有方法都没有进行锁同步,当多线程访问的时候容易找出死循环。虽然原创 2016-07-27 20:52:23 · 5691 阅读 · 2 评论 -
Java中synchronized关键字的使用
Java中synchronized关键字的使用对于关键字synchronized,研究起来,发现还是有许多让自己模糊的地方,网上也有很多篇博客对synchronized关键字的使用讲解的相当好,自己也受益匪浅。自己之所以还写一篇博客来介绍synchronized的目的只有一个:加深自己对synchronized的理解。写博客有时候确实是一个好的东西,往往研究某个知识点的时候,自己觉得弄懂了,但是过几原创 2016-07-26 21:54:59 · 990 阅读 · 4 评论 -
《Java源码分析》:ReferenceQueue、Reference及其子类
《Java源码分析》:ReferenceQueue、Reference及其子类在看完WeakHashMap源码之后,看了有关于讲解WeakHashMap的些许博客,发现了几个比较有意思的类:Reference、Reference子类(SoftReference、WeakReference、PhantomReference)以及ReferenceQueue。以前自己只是知道这些类的存在,在看WeakH原创 2016-07-26 14:57:53 · 4864 阅读 · 5 评论 -
WeakHashMap和HashMap的区别
WeakHashMap和HashMap的区别前面对HashMap的源码和WeakHashMap的源码分别进行了分析。在WeakHashMap源码分析博文中有对与HashMap区别的比较,但是不够具体系统。加上本人看了一些相关的博文,发现了一些好的例子来说明这两者的区别,因此,就有了这篇博文。WeakHashMap和HashMap一样,WeakHashMap也是一个散列表,它存储的内容也是键值对(ke原创 2016-07-26 14:52:12 · 6670 阅读 · 2 评论 -
《Java源码分析》:WeakHashMap
《Java源码分析》:WeakHashMap这篇博文就来看下WeakHashMap这个类的源码。博文的思路也是从继承结构、构造方法、常见的方法这些方面来分析WeakHashMap这个类的源码。说明:WeakHashMap也是一个“数组和链表”的结合体1、WeakHashMap的继承结构 public class WeakHashMap<K,V> extends Abstract原创 2016-07-26 11:24:11 · 1046 阅读 · 0 评论 -
《Java源码分析》:LinkedHashSet
《Java源码分析》:LinkedHashSet上篇博文对HashSet的源码进行了分析,这篇博文就是对LinkedHashSet进行一个分析。HashSet是借助于HashMap来进行实现的,而LinkedHashSet是基于LinkedHashMap进行实现的。1、LinkedHashSet的继承体系LinkedHashSet是继承HashSet类,并实现了Set接口。因此具有HashSet类的原创 2016-07-22 21:39:14 · 574 阅读 · 1 评论 -
《Java源码分析》:HashSet
《Java源码分析》:HashSet前面几篇把Map、List相关的的几个类看了下,当然Set接口相关的类也相当的重要,我们也用的比较多,因此,我们也需要了解下Set接口的两个实现类HashSet、TreeSet的源码。这篇博文是记录HashSet的源码分析。下篇博文就来记录TreeSet的源码分析。如果想了解其他的源码分析,可点击下面相对应的连接哈。HashMap类的源码分析在这里:http://原创 2016-07-22 16:20:11 · 1044 阅读 · 0 评论 -
《Java源码分析》:Stack
《Java源码分析》:StackHashMap类的源码分析,博客在这里:http://blog.csdn.net/u010412719/article/details/51980632Hashtable类的源码分析,博客在这里:http://blog.csdn.net/u010412719/article/details/51972602LinkedHashMap类的源码分析,博客在这里:http:原创 2016-07-22 15:14:06 · 701 阅读 · 0 评论 -
《JAVA源码分析》:LinkedList
LinkedList源码分析今天就来看下LinkedList的源码,先看下LinkedList的继承体系结构。public class LinkedList<E>extends AbstractSequentialList<E>implements List<E>, Deque<E>, Cloneable, java.io.SerializableLinkedList实现了List、Deque原创 2016-04-11 18:59:03 · 1059 阅读 · 0 评论 -
《JAVA源码分析》:ArrayList
《JAVA源码分析》:ArrayListArrayList继承体系结构如下:public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.SerializableArrayList类主要是继承AbstractList类并实现了List接口,实原创 2016-04-09 23:20:15 · 3905 阅读 · 8 评论 -
《Java源码分析》:Semaphore
《Java源码分析》:SemaphoreSemaphore 是一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动。说白了,Semaphore是一个计数器,在计数原创 2016-08-03 15:55:21 · 2556 阅读 · 0 评论 -
《Java源码分析》:ReadWriteLock(第一部分)
《Java源码分析》:ReadWriteLock(第一部分)对象的方法中一旦加入synchronized关键字修饰,则任何时刻都只能有一个线程能够访问synchronized修饰的方法,例如:在Hashtable类中就是所有方法都使用了synchronized关键字修饰,这虽然解决了线程安全的问题,但是也降低了程序的并发性能(吞吐量)。在Hashtable中,即使我们使用get方法也只能只有一个线程原创 2016-08-03 22:09:12 · 1232 阅读 · 2 评论 -
《Java源码分析》:Hashtable
《Java源码分析》:HashtableHashtable类的实现也是基于“数组和链表”来实现的。Hashtable的继承关系为: public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializable 继承的是Diction原创 2016-07-20 21:53:55 · 1494 阅读 · 0 评论