底层源码学习
文章平均质量分 90
后海hh
爱好技术,喜欢专研底层和看流行的开源代码,有一定的代码洁癖,会定时优化重构代码,使其扩展性维护性和性能更好
展开
-
ReetrantLock源码解析(一):获得公平锁和非公平锁lock()
原文链接:http://www.cnblogs.com/java-zhao/p/5131544.html最常用的方式: int a = 12; //注意:通常情况下,这个会设置成一个类变量,比如说Segement中的段锁与copyOnWriteArrayList中的全局锁 final ReentrantLock lock = new Reentrant...转载 2017-06-15 23:39:22 · 1737 阅读 · 0 评论 -
ReentrantLock源码解析(三):总结
常用方式: int a = 12; //注意:通常情况下,这个会设置成一个类变量,比如说Segement中的段锁与copyOnWriteArrayList中的全局锁 final ReentrantLock lock = new ReentrantLock(); lock.lock();//获取锁 try...原创 2017-06-17 17:08:22 · 275 阅读 · 0 评论 -
CopyOnWriteArraySet源码解析
原文地址:http://www.cnblogs.com/java-zhao/p/5122447.html1、对于CopyOnWriteArraySet需要掌握以下几点创建:CopyOnWriteArraySet()添加元素:即add(E)方法删除对象:即remove(E)方法遍历所有对象:即iterator(),在实际中更常用的是增强型的for循环去做遍历注:CopyOnWriteArraySet...转载 2017-06-22 17:33:04 · 566 阅读 · 0 评论 -
CopyOnWriteArrayList源码解析
原文链接:http://www.cnblogs.com/java-zhao/p/5121944.html1、对于CopyOnWriteArrayList需要掌握以下几点创建:CopyOnWriteArrayList()添加元素:即add(E)方法获取单个对象:即get(int)方法删除对象:即remove(E)方法遍历所有对象:即iterator(),在实际中更常用的是增强型的for循环去做遍历注...转载 2017-06-22 16:57:36 · 272 阅读 · 0 评论 -
ConcurrentHashMap源码解析
原文地址:http://www.cnblogs.com/java-zhao/p/5113317.html1、对于ConcurrentHashMap需要掌握以下几点Map的创建:ConcurrentHashMap()往Map中添加键值对:即put(Object key, Object value)方法获取Map中的单个对象:即get(Object key)方法删除Map中的对象:即remove(Ob...转载 2017-06-21 17:48:33 · 319 阅读 · 0 评论 -
ConcurrentLinkedQueue源码解析
原文链接:http://www.jianshu.com/p/26d9745614dd前言我们要实现一个线程安全的队列有两种实现方式一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现,而非阻塞的实现方式则可以使用循环CAS的方式来实现,本节我们就来研究下ConcurrentLinkedQueue是如何保证线程...转载 2017-06-14 15:26:38 · 407 阅读 · 0 评论 -
LinkedBlockingQueue源码解析
原文地址:http://www.cnblogs.com/java-zhao/p/5135958.html1、对于LinkedBlockingQueue需要掌握以下几点创建入队(添加元素)出队(删除元素)2、创建Node节点内部类与LinkedBlockingQueue的一些属性 static class Node<E> { E item;//节点封装的数据 ...转载 2017-06-22 18:27:03 · 301 阅读 · 0 评论 -
ArrayBlockingQueue源码解析
原文地址:http://www.cnblogs.com/java-zhao/p/5135410.html1、对于ArrayBlockingQueue需要掌握以下几点创建入队(添加元素)出队(删除元素)2、创建public ArrayBlockingQueue(int capacity, boolean fair)public ArrayBlockingQueue(int capacity)使用方法...转载 2017-06-22 18:07:12 · 296 阅读 · 0 评论 -
HashMap源码解析
原文地址:http://www.cnblogs.com/java-zhao/p/5106189.html1、对于HashMap需要掌握以下几点Map的创建:HashMap()往Map中添加键值对:即put(Object key, Object value)方法获取Map中的单个对象:即get(Object key)方法删除Map中的对象:即remove(Object key)方法判断对象是否存在于...转载 2017-06-17 17:51:04 · 302 阅读 · 0 评论 -
HashSet源码解析
原文地址:http://www.cnblogs.com/java-zhao/p/5110953.html1、对于HashSet需要掌握以下几点HashSet的创建:HashSet()往HashSet中添加单个对象:即add(E)方法删除HashSet中的对象:即remove(Object key)方法判断对象是否存在于HashSet中:containsKey(Object key) 注:HashS...转载 2017-06-22 17:27:43 · 236 阅读 · 0 评论 -
LinkedList源码解析
原文地址:http://www.cnblogs.com/java-zhao/p/5105575.html一、对于LinkedList需要掌握的八点内容LinkedList的创建:即构造器往LinkedList中添加对象:即add(E)方法获取LinkedList中的单个对象:即get(int index)方法修改LinkedList中的指定索引的节点的数据set(int index, E elem...转载 2017-06-22 17:16:37 · 249 阅读 · 0 评论 -
ArrayList源码解析
原文地址:http://www.cnblogs.com/java-zhao/p/5102342.html一、对于ArrayList需要掌握的七点内容ArrayList的创建:即构造器往ArrayList中添加对象:即add(E)方法获取ArrayList中的单个对象:即get(int index)方法删除ArrayList中的对象:即remove(E)方法遍历ArrayList中的对象:即iter...转载 2017-06-21 18:15:24 · 315 阅读 · 0 评论 -
String源码解析
前提:先了解下什么是声明,什么时候才算是产生了对象实例其中x并未看到内存分配,变量在使用前必须先声明,再赋值,然后才可以使用。java基础数据类型会用对应的默认值进行初始化 一、首先看看Java虚拟机JVM的内存块及其变量、对象内存空间是怎么存储分配的 1、栈:存放基本数据类型及对象变量的引用,对象本身不存放于栈中而是存放于堆中 1)、基础类型 byte (8位...转载 2016-07-12 22:29:53 · 1767 阅读 · 0 评论 -
ThreadPoolExecutor源码解析
原文地址:http://www.cnblogs.com/java-zhao/p/5147811.html1、源代码主要掌握两个部分线程池的创建:构造器提交任务到线程池去执行:execute() 2、构造器2.1、一些属性: /** * runState provides the main lifecyle control, taking on values: * ...转载 2017-06-26 17:31:45 · 309 阅读 · 0 评论 -
HttpClient 4.3连接池参数配置及源码解读
一、HttpClient连接池、请求参数含义二、执行原理及源码解读 1、创建HttpClient,执行request 2、连接池管理 2.1、连接池结构 2.2、分配连接 & 建立连接 2.3、回收连接 & 保持连接 2.4、instream.close()、resp...转载 2017-12-14 18:03:55 · 386 阅读 · 0 评论 -
Executors源码解析
原文地址:http://www.cnblogs.com/java-zhao/p/5149906.html1、Executors与ThreadPoolExecutorThreadPoolExecutor可以灵活的自定义的创建线程池,可定制性很高想创建好一个合适的线程池比较难使用稍微麻烦一些实际中很少使用Executors可以创建4种线程池,这四种线程池基本上已经包含了所有需求,将来根据业务特点选用就...转载 2017-06-30 22:34:57 · 375 阅读 · 0 评论 -
数据结构的理解
计算机里面最基本的数据结构是数组(比之更基本的是存储单元,但单独的存储单元不能构成结构),我们的软件逻辑就是针对数据结构的一系列操作,所有的更复杂的数据结构都是基于数组演化而来的。数组可以被规约为一组有连续下标(编号)的盒子,编号大于等于零。那么针对数组的基本操作就有检索(Search)、修改(modify)、添加(Append)、插入(Insert)、删除(delete)等。 检索和时间复杂度转载 2016-07-27 13:54:18 · 286 阅读 · 0 评论 -
ReentrantLock源码解析(二):释放锁unlock()
原文地址:http://www.cnblogs.com/java-zhao/p/5133402.html最常用的方式: int a = 12; //注意:通常情况下,这个会设置成一个类变量,比如说Segement中的段锁与copyOnWriteArrayList中的全局锁 final ReentrantLock lock = new Reentrant...转载 2017-06-17 17:03:39 · 377 阅读 · 0 评论