![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JDK源码
小雨的光
这个作者很懒,什么都没留下…
展开
-
HashMap源码阅读(JDK1.8)
HashMap实现了Map接口,继承了AbstractMap父类(AbstractMap也实现类Map接口)。HashMap的类声明如下:public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable {}以下是...原创 2019-11-15 09:46:22 · 166 阅读 · 0 评论 -
ConcurrentHashMap源码阅读
面试时面试官最常问的几个问题:1. HashMap是线程安全的吗? 答:不是。2. 既然HashMap不是线程安全的,那有什么替代方案? (1)用HashTable,它是线程安全的,但是被弃用了(性能问题被弃用了)。 (2)用HashMap,但是所有调用它方法的地方,都做加锁处理操作。 (3)用ConcurrentHashMap,一了百了。3....原创 2019-11-09 09:55:57 · 138 阅读 · 0 评论 -
阻塞队列BlockQueue
先上BlockQueue的源码:public interface BlockingQueue<E> extends Queue<E> { //增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常 boolean add(E e); //添加一个元素并返回true 如果队列已满,则返回false boo...原创 2019-11-09 09:08:15 · 442 阅读 · 0 评论 -
lock接口的lock()和tryLock()区别
正文开始前先把lock接口的源码摆出来(精简后的,特意保留了部分注释)public interface Lock { /** * Acquires the lock. */ void lock(); /** * Acquires the lock unless the current thread is * {@linkpl...原创 2019-11-09 08:36:15 · 8050 阅读 · 5 评论 -
公平锁(FairSync)和非公平锁(NonfairSync)
接着上一篇深入WriteLock和ReadLock,我们这篇博客将要揭开公平锁(FairSync)和非公平锁(NonfairSync)的神秘面纱。公平锁(FairSync)源码: /** * Fair version of Sync */ static final class FairSync extends Sync { privat...原创 2019-11-09 08:21:53 · 1826 阅读 · 2 评论 -
深入WriteLock和ReadLock
接着上一篇JDK lock锁,这次我们来挖一挖lock锁的底层。首先,我们来看看WriteLock的实现 public static class WriteLock implements Lock, java.io.Serializable { private static final long serialVersionUID = -499244864640769...原创 2019-11-08 09:05:57 · 556 阅读 · 0 评论 -
JDK lock锁(面试)
1. lock锁家族关系图(1)lock接口最常见的实现有ReadLock、WriteLock,ReentrantLock三个,其中ReadLock、WriteLock是ReentrantReadWriteLock内部的静态类。(2)ReentrantReadWriteLock实现类ReadWriteLock接口,并通过操作内部类ReadLock和WriteLock来实现读写分离。...原创 2019-10-24 08:26:36 · 640 阅读 · 0 评论 -
JDK并发包(面试)
JDK并发包下主要新增了两个内容,一个是关于线程和锁的同步控制工具,一个是并发容器。面试时问的比较多的是信号量、倒数计数器、ConcurrentHashMap。(1)信号量(Semaphore)信号量可以用来限流。Semaphore内部维护了一个计数器,在多线程访问的情况下,可以限制应用程序每次处理的请求数量。(2)倒数计数器(CountDownLatch)倒数计数器可以...原创 2019-10-23 09:01:27 · 503 阅读 · 0 评论 -
线程池原理(面试)
1. 什么是线程池? 顾名思义,存放线程的一个池子。2.怎么设计一个线程池 (1) 新建一个数组,创建一堆线程存放进去; (2) 线程池中的线程来处理任务,处理完成后回收线程而不是销毁线程; (3) 设计等待队列来存放来不及处理的任务; (4) 拒绝策略4.JDK中的线程池4.1 线程池的参数public ThreadPoolEx...原创 2019-10-24 08:09:45 · 991 阅读 · 0 评论 -
AbstractCollection类
public abstract class AbstractCollection<E> implements Collection<E> { protected AbstractCollection() { } public abstract Iterator<E> iterator(); public abst...原创 2019-08-16 17:53:11 · 178 阅读 · 0 评论 -
Collection接口
public interface Collection<E> extends Iterable<E> { // Query Operations int size(); boolean isEmpty(); boolean contains(Object o); Iterator<E> iterator();...原创 2019-08-16 17:50:28 · 134 阅读 · 0 评论 -
Iterable接口
public interface Iterable<T> { Iterator<T> iterator(); default void forEach(Consumer<? super T> action) { Objects.requireNonNull(action); for (T t : this)...原创 2019-08-16 17:47:25 · 303 阅读 · 0 评论 -
JDK源码阅读(8):Thread类
以上是百科对线程的描述。知道了什么是线程,我们就来看看JAVA中Thread类的声明:public class Thread implements Runnable { //很惊喜吧?和Object类一个套路,创建对象的那一刹那先绑定一些系统函数。 private static native void registerNatives(); sta...原创 2019-04-11 20:10:56 · 232 阅读 · 0 评论 -
JDK源码阅读(3):AbstractStringBuilder类
顾名思义,AbstractStringBuilder类是一个抽象类。String类基本上等价于一个不可变的基本数据类型,但是,我们对于String具有很高的期望,希望它是可变的,这样我们就可以做很多事了。于是,就有了StringBuffer和StringBuilder。在阅读StringBuffer和StringBuilder前,有必要先读读它们的父类AbstractStringBuild...原创 2019-04-09 12:56:00 · 165 阅读 · 0 评论 -
JDK源码阅读(4):StringBuffer类
AbstractStringBuilder有两个实现类,一个是StringBuilder,另一个是StringBuffer。AbstractStringBuilder要解决的是String对象不可变的问题。那么,StringBuffer和StringBuilder作为AbstractStringBuilder的实现类,区别又是什么呢? 可以看出,还是很不一样的。接下来,我们...原创 2019-04-09 15:07:13 · 172 阅读 · 0 评论 -
JDK源码阅读(1):Object类
所有的java类都是基于Object类的。可以说,Object类是java的起点。我们会通过这样的方式来创建一个java对象:Object object = new Object();在这个过程中,发生了什么呢?我们知道,实例化一个对象的过程中,除了构造方法,静态代码块也会被执行。打开Object类远吗,会发现Object类并没有构造方法,但是有一个静态代码块:private...原创 2019-04-03 15:49:51 · 141 阅读 · 0 评论 -
JDK源码阅读(5):StringBuilder类
之前的博文介绍了AbstractStringBuilder和StringBuffer,这一篇文章给String系列收个尾。老规矩,先上源码:public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, CharSequence{ /** use seri...原创 2019-04-09 15:44:11 · 137 阅读 · 0 评论 -
JDK源码阅读(6):Boolean类
偷个懒,以为Boolean类的源码真没啥好说的,硬看就对了。public final class Boolean implements java.io.Serializable, Comparable<Boolean>{ /** * The {@code Boolean} obj...原创 2019-04-09 16:11:25 · 161 阅读 · 0 评论 -
JDK源码阅读(7):Byte类
public final class Byte extends Number implements Comparable<Byte> { public static final byte MIN_VALUE = -128; public static final byte MAX_VALUE = 127; public static String...原创 2019-04-09 16:16:40 · 192 阅读 · 0 评论 -
如何优雅的访问ArrayList和LinkList
(1)采用ArrayList对随机访问比较快,而for循环中的get()方法,采用的即是随机访问的方法,因此在ArrayList里,for循环较快;(2)采用LinkedList则是顺序访问比较快,iterator中的next()方法,采用的即是顺序访问的方法,因此在LinkedList里,使用iterator较快;从数据结构角度分析,for循环适合访问顺序结构,可以根据下标快速获取指定...原创 2019-08-16 16:53:37 · 536 阅读 · 0 评论 -
探索JAVA不可变集合
编写测试类package com.zlyx.demo.test;import java.util.Collections;import java.util.List;import com.zlyx.easycore.list.EasyList;import com.zlyx.easycore.map.Maps;import com.zlyx.easycore.tool.Con...原创 2019-08-16 17:22:16 · 1338 阅读 · 0 评论 -
JDK源码阅读(2):String类
反编译String类,文件头包中很长的一段介绍里包含了这样的几行文字: * <p> * Strings are constant; their values cannot be changed after they * are created. String buffers support mutable strings. * Because String objec...原创 2019-04-08 13:13:57 · 103 阅读 · 0 评论