Pumpkin Fu's Blog

Thinking will not overcome fear but action will.

Java ThreadPoolExecutor 实现 之 SynchronousQueue (三)

了解 Java J.U.C 包下的 ThreadPoolExecutor 原理之 SynchronousQueue

正文 继上篇博客,本次讲一下 SynchronousQueue 同步阻塞队列,粗看 SynchronousQueue 代码,会发现并没有像 LinkedBlockingQueue 一样,有一个容器的概念,在 SynchronousQueue 中,所有的操作都是 “成对” 出现的,怎么说呢,就是一个生产者生产出来的消息,必须有一个消费者去消费,生产者才能继续生产,否则就会阻塞等待,知道有一...

Java ThreadPoolExecutor 实现 之 LinkedBlockingQueue (二)

了解 Java J.U.C 包下的 ThreadPoolExecutor 原理之 LinkedBlockingQueue

正文 balabala… 2019 年的第一篇博客,继续 2018 年的最后一篇博客 ThreadPoolExecutor 的讲解,我们今天来说一下在 ThreadPoolExecutor 里面用到的队列, LinkedBlockingQueue,SynchronousQueue 等, 今天这篇博客主要来讲解一下 LinkedBlockingQueue,相比 SynchronousQue...

Java ThreadPoolExecutor 实现 之 ThreadPoolExecutor (一)

了解 Java J.U.C 包下的 ThreadPoolExecutor 原理

正文 近两天比较忙,ThreadPool 是近期看的一个点,一直没抽时间写一篇博客,主要对技术一直比较有兴趣,所以还是抽空写了一篇,巩固一下。 来了解一下线程池总体的执行流程 我大致画了一张图 大致流程就是: 执行 execute 方法,检查核心线程数是否小于定义的核心线程数量,如果小于,则直接创建一个新的线程执行任务 当前线程数量已经大于等于核心线程数,那么就去检查...

Java ReentrantLock AQS 实现(非公平)(二)

了解 ReentrantLock 中 Condition 的原理

正文 继上一篇博客,这一片博客讲一下 Condition 中的 signal 以及 await 这两个方法的原理,为了解决 lock 和 unlock 之间能够实现 Object 的 wait 和 notify 的效果, ReentrantLock 中引入了 Condition 的概念。 基本的 Condition 用法 贴一段经典的消费者生产者的 Condition 实现 p...

Java ReentrantLock AQS 实现(非公平)(一)

了解 ReentrantLock 非公平实现锁的获取和释放

正文 很久没有写博客了,最近看(炒冷饭)了一下 Java 中 ReentrantLock 锁的实现,ReentrantLock 锁的逻辑大部分都在 AQS (AbstractQueuedSynchronizer)里面,所以本文也大致在介绍 AQS 中的实现 先来看看锁中初级的用法 来一段简单的代码 class XXX { ... Reentra...

设计模式之 (Singleton)单例模式

看了下 Singleton 单例模式,一个比较常用简单的模式设计

Singleton 单例模式 单例模式相信大家都是耳熟能详的一个比较经典简单的设计模式,单例模式也会在很多地方碰到。 什么叫 Singleton 单例模式呢? 顾名思义,单例模式就是全局就只有单例的模式,也就是说,全局环境下,只会有一份对象,该对象会被复用,单例模式下,这个唯一的对象必须由单例类自己来创建, 并且单例类只能对外提供这一份创建好的对象,在单例模式下,首要解决的问题就是如何...

设计模式之 (Facade)外观模式

看了下 Facade 模式,准备了一篇博客

Facade 外观模式 最近几天有一个需求,要改一下比较久远之前写的代码,主要是一个权限的系统(其实就是很简单的用户角色资源的实现),发现之前代码中居然有 Facade 这个字眼, 因为正好最近看了一点点的设计模式,感觉这个单词很熟悉,于是就查阅了一下,发现正是设计模式中的 Facade 模式,然而仔细阅读了之前的代码,发现之前对于这个设计模式, 使用的姿势不太对,简单点讲,就是我所写的不...

浅谈 Java HashMap 中的长度定义

为何 Java HashMap 中的容量要定义为2的幂次方?

正文 我们先来看看HashMap初始化和扩容部分的源码吧 看看 HashMap 的构造器 /** * Constructs an empty <tt>HashMap</tt> with the specified initial * capacity and load factor. * * @param ini...

Java intern() 方法解析

Java String.intern()方法,字符串常量池解析

注: 本文中所在的环境为jdk1.8的版本,1.6版本以及之前版本的本文中所测试的代码结果是不同的,本文之探讨1.8以及之后版本的jdk环境下的测试 String.intern()原理浅析 String.intern() 是一个 native 的方法,也就是通过 C++ 来实现的,底层调用的是 C++ 的 StringTable::intern 方法。 /** * R...

Java类初始化顺序

Java加载过程中,变量,构造器等是何时调用初始化的

前言 Java编写中,一定会遇到一些初始化顺序的问题,静态变量,静态初始化块,普通成员变量,普通初始化块以及构造器,本文将会使用例子的方式,来详细展示一下 java 类里面各个部分的初始化顺序以及不触发初始化的一些情况 正文 我先上代码,后面会详细解释 测试代码 没有继承,并且会触发类的初始化 public class NoExtendTest { public...