YOU'VE MADE A BRAVE DECISION, WELCOME.

每一个不曾起舞的日子都是对生命的辜负。

一、Condition的概念介绍回忆synchronized关键字,它配合Object的wait()、notify()系列方法可以实现等待/通知模式。 对于Lock,通过Condition也可以实现等待/通知模式。 Condition是一个接口。Condition接口的实现类是Lock(AQS)中的ConditionObject。Lock接口中有个 newCondition()方法,通过这个方法可以获得Condition对象(其实就是C

Read More...


一、Executor框架的介绍Java中的线程既是工作单元又是执行机制。JDK1.5开始,把工作单元与执行机制分离开来。工作单元为Runnable(Thread实现该接口)和Callable,执行机制就是Executor框架。 使用Executor框架时不用显式的创建线程Thread。 Executor框架由三部分组成: 任务:Runnable或Callable 任务的执行:ExecutorService接口及其实现。 异

Read More...


一、线程池的介绍线程池是一种并发框架。 优势: 降低资源消耗。(重复利用线程,减少开销) 提高响应速度。(任务到达可直接执行,不需要等待创建线程) 提高线程的可管理性。(统一分配、监控、调优) ThreadPoolExecutor是线程池的核心实现类。可以通过ThreadPoolExecutor来创建一个线程池。 二、线程池的实现分析线程池的实现是ThreadPoolExecutor类,因此重点描述ThreadPoolExecuto

Read More...


一、ConcurrentHashMap的介绍ConcurrentHashMap在JDK8中进行了巨大改动,它舍弃了锁分段的技术,大量引入了CAS操作,以此来实现并发操作。 回忆JDK1.7中的ConcurrentHashmap,当hash碰撞频繁时,链表长度会拉长,而链表的增改删查操作都会消耗很长的时间,影响性能,因此和JDK1.8中的HashMap一样,当链表过长时,将其结构转化为红黑树,由此提高性能。 二、Concurrent

Read More...


一、ConcurrentHashMap的介绍ConcurrentHashMap是线程安全且高效的HashMap,可以在多线程的环境下使用。ConcurrentHashMap允许多个线程并发访问,其关键在于使用了锁分段技术。锁分段:首先将数据分成一段一段地存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个数据段的时候,其他数据段也能被其他线程访问。 二、ConcurrentHashMap的实现原理ConcurrentHashMa

Read More...


一、线程安全性我们知道,HashMap是非线程安全的,只能在单线程的情况下使用。那么为什么不能在并发的情况下使用呢?因为在并发时,HashMap的扩容会产生错误而形成环形链表,导致读取数据时发生死循环。 回忆前面描述的扩容过程,调用了transfer()方法将旧链表转化为新链表: 1234567891011121314151617void transfer(Entry[] newTable) { Entry[] sr

Read More...


HashMap的实现分析介绍通过前面JDK1.7的分析,我们知道,当负载因子和Hash算法设计的很好时,可以降低hash碰撞的概率,但在数据量过大时也避免不了会出现链表变长的情况,一旦出现链表过长,查找元素变慢,则会严重影响HashMap的性能。于是,在JDK1.8中,对数据结构做了进一步的优化,引入了红黑树。而当链表长度太长(默认超过8)时,链表就转换为红黑树,利用红黑树快速增删改查的特点提高HashMap的性能,其中会用到红黑树的插

Read More...


一、HashMap的介绍HashMap是存储键值对(key,value)的一种数据结构。每一个元素都是一个key-value。HashMap最多只允许一个key为null,允许多个key的value值为null。HashMap是非线程安全的,只适用于单线程环境。HashMap实现了Serializable、Cloneable接口,因此它支持序列化和克隆。 二、HashMap的实现原理从底层结构、put和get方法、hash数组索引、扩容

Read More...


一、ReentrantReadWriteLock的概念介绍前面提到的锁(独占锁、ReentrantLock)等都是排他锁,这些锁在同一时刻只允许一个线程访问。而读写锁在同一时刻可以允许多个读线程访问,但在写线程访问时,所有读线程和其他写线程都阻塞。 ReadWriteLock并不是继承自Lock接口,而是一个单独的接口。 1234public interface ReadWriteLock { Lock readLock

Read More...


一、Java对象的创建过程在Java程序中,通常都是通过 new 关键字来创建对象,那么在虚拟机中对象是如何创建的?(普通Java对象,不包含数组和Class对象) 虚拟机创建对象主要经历5个步骤:类加载检查、为对象分配内存、内存空间初始化、对象设置、执行对象方法。 1 类加载检查当虚拟机遇到 new 指令时,首先会去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果

Read More...


人生如逆旅,我亦是行人。