林烟夜暖

阅读JDK、框架源码的总结,微服务、RPC、服务治理实践等

ReentrantReadWriteLock源码分析

ReentrantReadWriteLock

ReentrantReadWriteLock源码分析 一、ReentrantReadWriteLock简介 重入锁ReentrantLock是排他锁,排他锁在同一时刻仅有一个线程可以进行访问,但是在大多数场景下,大部分时间都是提供读服务,而写服务占有的时间较少。然而读服务不存在数据竞争问题,如果一个线程在读时,禁止其他线程读势必会导致性能降低。所以JDK就提供了读写锁(ReadWrite...

ReentrantLock源码分析

ReentrantLock

ReentrantLock源码分析 一、ReentrantLock简介 java.util.concurrent.locks.ReentrantLock是JDK1.5后提供的锁,可以提供与synchronized监视器锁相同的独占锁、可重入互斥功能和内存语义,并且还具有非阻塞的尝试加锁、定时等待的加锁等功能,提供了和wait()、notify()相同功能的Condition类,并且一个锁...

AQS源码分析3——Condition接口实现之ConditionObject分析

Condition/AQS.ConditionObject

AQS源码分析3——Condition接口实现之ConditionObject分析 Lock与Condition接口功能分析这边文章分析了Lock与Condition接口的方法和功能,下面分析AbstractQueuedSynchronizer对于Condition接口的实现细节。 一、Object类与Condition接口方法的对比 Lock与Condition接口功能分析已经阐述,...

Lock与Condition接口功能分析

接口功能分析

Lock与Condition接口分析 一、Lock接口 Lock接口的出现是为了拓展现有的监视器锁(synchronized),实现了可定时、可轮询与可中断的锁获取操作,公平队列等。 public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException; ...

Spring框架中自定义XML标签

NamespaceHandler/BeanDefinitionParser

Spring框架中自定义XML标签及解析过程分析 转自李懿名-spring自定义xml标签 要实现自定义的xml配置,需要有两个默认spring配置文件来支持。一个是spring.schemas,一个是spring.handlers,前者是为了验证你自定义的xml配置文件是否符合你的格式要求,后者是告诉spring该如何来解析你自定义的配置文件。 自定义标签涉及的核心接口为: ...

Dubbo XML标签解析分析

DubboBeanDefinitionParser/DubboNamespaceHandler

Dubbo XML标签解析分析 Dubbo自定义了很多xml标签,例如<dubbo:application>/<dubbo:service>/<dubbo:reference>等,这是利用了Spring框架允许自定义标签的能力。Dubbo中主要涉及dubbo.xsd、spring.schemas、DubboBeanDefinitionParser、Dub...

正则表达式Pattern、Matcher、捕获分组测试

Pattern、Matcher

正则表达式测试 Pattern、Matcher等与正则表达式相关类的文档见JDK API文档,以及下面注释的博客链接。 一、Pattern类测试 import java.util.Arrays; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Pattern/Matcher 测试 * 参考...

Dubbo Compiler接口分析

Compiler/SPI

Dubbo Compiler接口分析 com.alibaba.dubbo.common.compiler.Compiler接口是编译器SPI扩展接口,作为 Java 代码编译器,用于动态生成字节码,加速调用。接口描述如下: // 默认扩展实现为com.alibaba.dubbo.common.compiler.support.JavassistCompiler @SPI("javassi...

AQS源码分析2——共享锁的获取与释放

AbstractQueuedSynchronizer

AQS源码分析2——共享锁的获取与释放 共享锁与独占锁的区别 共享锁与独占锁最大的区别在于,独占锁是独占的、排他的,因此在独占锁中有一个exclusiveOwnerThread属性,用来记录当前持有锁的线程。当独占锁已经被某个线程持有时,其他线程只能等待它被释放后才能去争锁,并且同一时刻只有一个线程能争锁成功。 而对于共享锁而言,由于锁是可以被共享的,因此它可以被多个线程同时持有。换句...

AQS源码分析1——独占锁的获取与释放

AbstractQueuedSynchronizer

AQS源码分析1——独占锁的获取与释放 AQS(AbstractQueuedSynchronizer)是Java中众多锁以及并发工具的基础,其底层采用乐观锁,大量使用了CAS操作, 并且在失败时采用自旋方式重试,以实现轻量级和高效地获取锁。 AQS虽然被定义为抽象类,但事实上它并不包含任何抽象方法。这是因为AQS是被设计来支持多种用途,如果定义抽象方法,则子类在继承时必须要覆写所有的抽象...