自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

APlus

乐于分享

  • 博客(19)
  • 资源 (1)
  • 收藏
  • 关注

原创 java.util.concurrent.ConcurrentHashMap源码分析(JDK1.8)

一、引言ConcurrentHashMap是Java并发工具包中的Map实现类,它支持多个线程并发操作Map。可以说,ConcurrentHashMap就是支持并发操作的HashMap。和HashMap不同的是,ConcurrentHashMap不支持添加键或值为null的键值对。ConcurrentHashMap继承关系及其内部类继承关系图(红色部分为内部类):ConcurrentHas...

2018-09-27 18:55:17 657

原创 Java线程池之ScheduledThreadPoolExecutor源码解析

一、引言ScheduledThreadPoolExecutor是Java并发工具包中的线程池实现类,可以用来执行定时、周期任务。相对于java.util.Timer,ScheduledThreadPoolExecutor性能更好,也能够提供更好的稳定性。Java线程池UML类图:可以看出,ScheduledThreadPoolExecutor继承了ThreadPoolExecutor,实现...

2018-09-25 13:03:34 1258

原创 java.util.concurrent.SynchronousQueue源码简析

一、引言SynchronousQueue是一个比较特殊的阻塞队列实现类,它实际上内部并不会给元素维护一系列存储空间,它维护了一组线程,这些线程正需要获取元素或者添加元素。在生产-消费者模型中,这样做的好处是可以降低从生产者到消费者中间的延迟,而在LinkedBlockingQueue或者ArrayBlockingQueue中,生产者必须将元素插入到其中存储元素的结构中然后才能转交给消费者。此外...

2018-09-23 16:09:20 2226

原创 java.util.concurrent.CopyOnWriteArrayList源码分析

一、引言CopyOnWriteArrayList是Java并发工具包中可支持并发操作的List集合类。当我们修改CopyOnWriteArrayList的元素时,CopyOnWriteArrayList会将内部的数组复制一份,然后进行修改,修改完成后再将保存数组的引用指向这个修改好的数组。这样做的好处是我们可以对容器进行并发的读操作而无需对整个容器加锁,它采用的是一种读、写分离的并发解决方案。...

2018-09-20 15:33:53 488

原创 Java线程池之ThreadPoolExecutor源码分析

一、引言Java并发工具包自带了很多常用的线程池,程序可以将定义的Runnable、Callable任务提交到线程池当中运行,由线程池负责异步执行其中的任务。Java线程池框架结构图: 其中,Executors是一个线程池静态工厂类,可以调用其中的静态方法获取一些常用的线程池实现类。Executors的内部类DelegatedExecutorService采用了装饰者设计模式,其内部...

2018-09-19 14:59:56 621

原创 Java同步框架AbstractQueuedSynchronizer(AQS)原理分析

一、引言AbstractQueuedSynchronizer(以下简称AQS)是一个用于构建锁或其它同步工具的基础框架。它的内部提供了一个FIFO队列

2018-09-16 22:41:58 382

原创 java.util.concurrent.FutureTask源码解析

本文参照的是JDK1.8版本的FutureTask源码一、引言FutureTask可以用来封装一个Runnable或者Callable任务,并异步执行,当用户想要返回的结果时,只需要调用get方法获取。FutureTask继承关系图: FutureTask继承了RunnableFuture接口,它可以直接作为一个Runnable或Callable提交到线程池执行。二、源码...

2018-09-15 22:18:46 4850

原创 java.util.concurrent.ArrayBlockingQueue原理简要分析

一、引言ArrayBlockingQueue是一个基于静态数组的阻塞队列,可用于实现生产-消费者模型。它和LinkedBlockingQueue存在以下几个不同点: 1、锁的实现不同 ArrayBlockingQueue的入队和出队都是使用的一个锁,意味着只能有一个线程来修改它。 LinkedBlockingQueue采用了两把锁:入队锁和出队锁,可以有一个线程负责生产,一个线程负责...

2018-09-14 20:49:56 750

原创 java.util.concurrent.LinkedBlockingQueue原理分析

一、引言LinkedBlockingQueue是一个用于并发环境下的阻塞队列集合类,它可以用于生产-消费者模型。什么是阻塞队列? 阻塞队列和一般的普通队列(如LinkedList)不同,它可以实现线程的阻塞添加元素和取出元素 阻塞添加:当队列元素的数量达到上限时,队列会阻塞之后尝试添加元素的线程,直到有元素被移除后才会通知该线程。 阻塞删除:当队列元素为空时,队列会阻塞之后尝试取得元...

2018-09-14 10:49:38 1915

原创 java.util.concurrent.CyclicBarrier原理分析

一、引言CyclicBarrier是Java并发工具包中的一个同步工具类,它允许一组线程互相等待,直到等待的线程达到指定数量后,所有等待的线程才会继续执行。我们可以称它为栅栏。CyclicBarrier的构造方法有: 构造方法 解释 public CyclicBarrier(int parties) parties为等待线程的数量,等待的线程达到这个数后才会继...

2018-09-13 14:08:38 445

原创 java.util.concurrent.Semaphore(信号量)原理解析

一、引言Semaphore又称信号量,用来控制同时访问访问某个特定资源的操作数量,可以理解为是用于控制线程访问数量的工具类。 Semaphore管理着一组许可(permit),许可的数量可通过构造函数来指定。在执行某个操作时必须先获得许可,并在使用完毕后释放(release)许可。如果没有许可,那么尝试获取许可的线程会进入阻塞状态直到有许可可以使用。可以想象成一个房间,房间里只能容纳3...

2018-09-11 21:38:18 1160

原创 java.util.concurrent.locks.ReentrantLock原理分析

一、引言ReentrantLock是JDK1.5引入的一种工具类:它可以实现可重入锁的功能。在分析它的原理之前,我们先来回顾下基础知识:什么是可重入锁? 可重入锁是一种可重复可递归调用的锁,在一个线程获取这个锁后,这个线程依然可以再次获得这个锁,而其它线程要想获得锁只能等到它全部释放之后。 比如:public class Test { static final Reen...

2018-09-10 21:46:17 545

原创 java.util.Collections工具类方法概览

本文以JDK1.8的Collections源码进行解析一、引言java.util.Collections工具类提供了很多操作集合的方法,如果你还不了解这些方法的具体作用,那么了解其使用方法还是很有必要,可以有效的简化代码和增加其可读性 Collections类中的方法可分为一下几种类型: 1、搜索集合: 二分搜索元素://将List集合对key进行二分搜索,返回key的下标pu...

2018-09-06 20:34:04 752

原创 java.util.Timer源码解析

一、引言java.util.Timer是JDK提供的定时任务执行器,可以往Timer中添加定时任务并按期执行。 使用Timer首先需要创建Timer的实例,创建实例后可以通过调用schedule方法来创建任务,Timer中的定时任务需要用一个对象TimeTask表示,用户需要重写TimeTask的run方法来定义自己的任务。Timer是一个有缺陷的定时任务执行器,在新代码中已经不再推荐使...

2018-09-05 17:15:34 275

原创 java.lang.ref.Reference和ReferenceQueue源码解析

一、引言java.lang.ref.Reference类表示引用类型,于JDK1.2被引入,其子类有SoftReference(软引用),WeakReference(弱引用),PhantomReference(虚引用,又称幽灵引用)。回顾一下Java引用方面的基础知识: 1、如果一个对象没有任何引用了,那么这个对象会在GC的时候被回收。在我们平时写程序时大部分都是使用强引用:Obje...

2018-09-04 17:57:02 3448

原创 深入理解Java序列化机制:ObjectOutputStream源码简要分析

一、引言java.io.ObjectOutputStream是实现序列化的关键类,它可以将一个对象转换成二进制流,然后可以通过ObjectInputStream将二进制流还原成对象。在阅读ObjectOutputStream源码之前,我们先来回顾一下序列化相关的基础知识: 1、需要序列化的类必须实现java.io.Serializable接口,否则会抛出NotSerializableEx...

2018-09-03 22:00:01 15443 3

原创 java.io包中的输入流、输出流相关类概览

一、引言java.io里面提供了许多I/O类,可以方便地实现数据的输入和输出 java.io包下主要包含以下几个类的类型: 1、字节输入流:如InputStream及其子类 2、字节输出流:如OutputStream及其子类 3、字符输入流:如Reader及其子类 4、字符输出流:如Writer及其子类 5、文件本地地址描述:File类 6、文件描述符:FileDescripto...

2018-09-02 17:20:21 2255

原创 java.util.Hashtable源码分析

一、引言Hashtable在JDK中是一个古老的Map实现类,早在JDK1.0就已经存在。在新的代码中已经不推荐再使用Hashtable存储键值对,而是使用HashMap(无须多线程操作)或ConcurrentHashMap(需要多线程操作)。 Hashtable是一个线程安全的Map类,其大多数方法都加了synchronized关键字,意味着同一时间只能有一个线程对它的实例进行访问,而不是...

2018-09-01 20:15:50 506

原创 java.util.HashMap源码分析

一、概述HashMap是Java中常用的Map实现,它提供了一种键到值的映射,可以高效地查找键值对。HashMap内部是一种基于拉链法实现的哈希表。 HashMap的继承关系图: HashMap不是一个线程安全的类,如果需要并发操作Map应当使用ConcurrentHashMap。二、Map接口在了解HashMap前,我们先来回顾一下Map接口public inte...

2018-09-01 09:58:29 672

MySQL测试数据库employees(SQL文件)

MySQL官方测试数据库,已将DUMP文件整合进SQL文件。 MySQL官方测试数据库,已将DUMP文件整合进SQL文件。

2018-11-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除