这个类首先是一个抽象类,定义了一个模板,很多java同步相关的类(ReetrantLock.Semaphore.CountDownLatch等)都是基于AbstractQueuedSynchronizer来实现的 AbstractQueuedSynchronizer 本身就是一个链表,提供的线程安全的操作.核心思想是通过CAS插入链表的尾部和获取链表的头结点.算法暂时先不谈,先说说他的应用,主要下先说说他的一些模板方法. AbstractQueuedSynchronizer#acquire()…
在jdk中为我们提供了三种创建线程池的方式,但是在阿里的编码规范里面都是明确禁止使用这三种api去创建线程池,推荐我们去自定义线程池.为什么? 要回答为什么,我们需要明白创建线程池时,各参数的作用: 首先我们来看一下jdk提供的创建线程池的三个api: 1. newFixedThreadPool    创建固定数量线程的线程池. 2. newSingleThreadExecutor   创建单线程的线程池 3. newCachedThreadPool 创建一个带有缓存的线程池 发现这几种创建线程…
Lock和Condition在JDK中LinkedBlockingQueue的应用,核心源码注释解析如下: import java.util.concurrent.LinkedBlockingQueue.Node; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock…
Spring 中参数名称解析 - ParameterNameDiscoverer Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) JDK 1.8 之后引入 Parameter 类,可以通过它获取方法中参数的名称.Spring 中也增加了对它的支持 ParameterNameDiscoverer,特别是在 Spring MVC 中大量使用. 一.ParameterNameDiscoverer 使用 @Test publi…
1.SAX解析工具 SAX解析工具:是Sun公司提供的,内置JDK中.org.xml.sax.*         点击查看: DOM解析相关知识:以及DOM和SAX解析的原理(区别) 2.SAX解析的核心API SAXParser类:用于读取和解析xml文件对象    parse(File f, DefaultHandler dh)方法----->解析xml文件        参数一:file:表示读取xml文件        参数二:DefaultHandler:SAX事件处理程序.使用Def…
沉淀再出发:java中线程池解析 一.前言 在多线程执行的环境之中,如果线程执行的时间短但是启动的线程又非常多,线程运转的时间基本上浪费在了创建和销毁上面,因此有没有一种方式能够让一个线程执行完自己的任务之后又被重复使用呢?线程池的出现就是为了解决这个问题.到了现在,我们知道的池已经有很多了,比如IP池,在NAT协议中使用,比如缓存机制,其实本质上就是重复利用已经产生的资源,从而减少对新资源的使用,以此来缓解对内存和CPU的压力,或者加快执行的效率. 二.线程池的基本理解 2.1.线程池的概念…
前提 紧接着上一篇<通过源码浅析JDK中的资源加载>,ServiceLoader是SPI(Service Provider Interface)中的服务类加载的核心类,也就是,这篇文章先介绍ServiceLoader的使用方式,再分析它的源码. ServiceLoader的使用 这里先列举一个经典的例子,MySQL的Java驱动就是通过ServiceLoader加载的,先引入mysql-connector-java的依赖: <dependency> <groupId>m…
前提 用Java快三年了,注解算是一个常用的类型,特别是在一些框架里面会大量使用注解做组件标识.配置或者策略.但是一直没有深入去探究JDK中的注解到底是什么,底层是怎么实现了?于是参考了一些资料,做了一次稍微详细的分析. JDK的注解描述 参考JavaSE-8里面的JLS-9.6对注解的描述如下: 注解的声明如下: {InterfaceModifier} @ interface Identifier AnnotationTypeBody 接口修饰符 @ interface 注解标识符 注解类型的…
在多次延期后,Java 9将于9月21日以Java开发工具包9的形式出现,这是自2014年3月以来,Java标准版的第一次重大升级.官方列出了JDK 9的大约90个新特性,模块化是最主要的一个.将Java重新配置成模块化格式,这项任务已经持续了多年,但在编译.代码缓存和JavaScript部署等领域也会有其他改进. JDK 9的Java平台模块系统 Java 9最宝贵的特性,即模块化——以Java平台模块系统的形式——旨在将JDK分为运行.编译或构建时的一组模块.模块化被称为“可传递”的变化,这…
背景 大家知道,jdk安装的目录下,一般会有个src.zip包,这个包基本对应了rt.jar这个包.rt.jar这个包里面,就放了jdk中,jdk采用java实现的那部分类库代码,比如java.lang包下面的,什么ArrayList之类的. 如何才能调试这部分代码呢,这里的调试,是说,能够修改源代码.加注释.直接debug. 步骤 经过一番思考和探索后,可以这样: 解压src.zip包,因为解压后,里面有8000多个文件,比较大,我们也不需要调试所有的代码,我就挑了这个包下面的代码: 上面看到…