分类内部锁 / 显式锁内部锁通常指Synchronized锁。 显式锁通常指Lock接口实现的锁,如ReentrantLock。 公平锁 / 非公平锁一种获取锁的策略。 公平锁指按照线程申请锁的顺序获取锁。 非公平锁指不严格按照申请锁的顺序获取锁,如可按优先级获取锁,可能造成饥饿。 Synchron ...
Java并发编程学习笔记(二)活跃度问题
在并发编程中,我们经常通过锁来保证线程安全,但使用锁也可能会带来一系列其他的问题,如死锁等问题。我们知道Java虚拟机无法从死锁中恢复,因此了解死锁的发生场景能够让我们在编程过程中尽可能避免死锁的发生。 死锁定义死锁指一组线程中的每个线程都在等待由其他线程占有的因而无法获得的资源,导致线程无法继续推 ...
Java并发编程学习笔记(一)基础知识
基本概念并发和并行并发:多个计算任务在同一个CPU内核上进行时间片轮转,从宏观角度来看任务是同时进行的,而实际上多个任务是交替执行的。 并行:多个计算任务在不同的CPU内核上执行,是真正的同时执行。 进程和线程进程:具有一定独立功能的程序关于一个数据集合的一次运行活动,是一个动态概念。进程是并发执行 ...
Spring源码学习【八】SpringMVC(二)HandlerMapping
前言在前一篇中我们分析了DispatcherServlet的实现,在处理客户请求的doDispatch方法中提到了HandlerMapping,这是SpringMVC中请求控制的重要组件,用于将URL映射到Controller中。 首先,回忆一下平时使用的SpringMVC配置文件,通常会包括如下配 ...
Spring源码学习【八】SpringMVC(一)DispatcherServlet
前言Web环境是Spring框架的重要应用场景,而SpringMVC又是Web开发中一个常用的框架,因此我们有必要学习一下SpringMVC的实现原理。 回到Web项目的配置文件web.xml中,在使用SpringMVC时我们需要进行如下的配置: <servlet> <ser ...
Spring源码学习【七】Web环境中启动和关闭IOC容器
前言前面的几章中学习了Spring IOC容器和AOP的实现,对这两个核心功能有了一定了解后,让我们一起学习一下IOC容器在常用的Web环境中是如何使用的,这也是Spring框架在Web环境中的重要应用场景。 回忆一下在Web项目中配置Spring的过程,首先,我们需要在web.xml中进行如下配置 ...
Spring源码学习【六】AOP原理解析(二)拦截器链
前言通过上一篇 Spring源码学习【六】AOP原理解析(一)代理对象的生成 的学习,我们知道了Spring是通过后置处理器来生成代理对象的,且获取到代理对象后会阻止原Bean的默认实例化行为,从而将代理对象提供给用户使用,并通过代理对象实现对目标对象的增强,有了这些知识储备,我们继续以JdkDyn ...
Spring源码学习【六】AOP原理解析(一)代理对象的生成
前言AOP(Aspect Oriented Programming 面向切面编程)是Spring框架的核心功能之一,关于AOP中一些概念的理解可以参考 SpringAOP概念及其使用 ,下面以一个简单的例子作为Spring AOP源码学习的起点。 首先,定义一个切面类CustomAspect,如下所 ...
Spring源码学习【五】填坑篇之PropertyValue解析
经过上一篇文章 Spring源码学习【四】依赖注入过程 对Spring依赖注入过程的分析,我们知道了在注入Property时会创建一个深拷贝副本,将这个副本持有的Property注入到Bean中,在创建的过程中会使用BeanDefinitionValueResolver解析PropertyValue ...
Spring源码学习【四】依赖注入过程
总览通过前面的分析,我们知道了IOC容器在初始化过程中建立了BeanDefinition的数据结构,接下来就需要进行依赖注入,处理Bean之间的依赖关系。 通常,我们可以通过lazy-init属性控制Bean的实例化(依赖注入)时机。 当lazy-init=true时,依赖注入会发生在第一次向容器获 ...