JDK设计模式(十三)模板方法模式

1、概述 定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。 2、模式中的角色  抽象模板类(AbstractTemplate):实现了模板方法,定义了算法的骨架。  具体模板类(ConcreteTemplate):实现抽象类中的抽象方法,已完成完整的算法。 3、模式解读 模板方式模式的类图如下所示 模板方法 […]

JDK动态代理和CGLib代理实现分析

1、JDK动态代理 JDK的动态代理主要涉及到java.lang.reflect包中的两个类:Proxy和InvocationHandler。 其中 InvocationHandler是一个接口,可以通过实现该接口定义横切逻辑,在并通过反射机制调用目标类的代码,动态将横切逻辑和业务逻辑编织在一 起。 而Proxy为InvocationHandler实现类动态创建一个符合某一接口的代理实例。 Inv […]

类加载器

java类加载器,主要有系统加载器、当前加载器、线程上下文加载器 线程上下文加载器 一般来说,这个问题都来自于框架编程过程中需要动态的加载资源。一般来说,加载一个资源的时候,你会有至少有三个ClassLoader可以用来加载资源,系统ClassLoader(AppClassLoader),当前ClassLoader(可以理解为加载了当前Class的ClassLoader,比如你编写并部署在serv […]

深入理解jvm虚拟机

风景

每个Java开发者都知道Java字节码是执行在JRE((Java Runtime Environment Java运行时环境)上的。JRE中最重要的部分是Java虚拟机(JVM),JVM负责分析和执行Java字节码。Java开发人员并不需要去关心JVM是如何运行的。在没有深入理解JVM的情况下,许多开发者已经开发出了非常多的优秀的应用以及Java类库。不过,如果你了解JVM的话,你会更加了解Jav […]

Java锁(二)ReentrantLock独占锁分析

    ReentrantLock的功能是实现代码段的并发访问控制,是一种排它锁,也就是通常意义上所说的锁,内部有两种实现NonfairSync和FairSync,公平锁和非公平锁,默认采用非公平锁策略。ReentrantLock的实现不仅可以替代隐式的synchronized关键字,而且能够提供超过关键字本身的多种功能。 1、ReentrantLock的使 […]

Java锁(一)AbstractQueuedSynchronizer分析

作为一个java开发者,并发编程是不可或缺的,在并发的过程,Lock是并发的关键, 本系列文章主要来讲解锁的原理和机制。 在理解J.U.C原理以及锁机制之前,我们来介绍J.U.C框架最核心也是最复杂的一个基础类:java.util.concurrent.locks.AbstractQueuedSynchronizer。 上面的继承体系中,AbstractQueuedSynchronizer是Cou […]

深入理解java内存模型

java线程之间的通信对程序员完全透明,内存可见性问题很容易困扰java程序员,本文试图揭开java内存模型神秘的面纱。 本文大致分三部分: 重排序与顺序一致性; 三个同步原语(lock,volatile,final)的内存语义,重排序规则及在处理器中的实现; java内存模型的设计目标,及其与处理器内存模型和顺序一致性内存模型的关系。  深入理解java内存模型(一)——基础 深入理解 […]