Bean实例化前奏

Bean实例化前奏 在从配置文件中载入Bean定义,并解析成相应的BeanDefinition,注册Bean的后置处理器并调用,初始化好国际资源,事件广播等组件,注册监听器后,接下来就要做非懒加载bean的实例化工作。这个是在refresh()方法中调用finishBeanFactoryIn...

2019-04-14 15:06:49

阅读数 13

评论数 0

Spring容器的启动

Spring容器的启动 以AbstractApplicationContext为例,当启动容器的时候,会调用refresh方法。 @Override public void refresh() throws BeansException, IllegalStateException { s...

2019-04-09 23:34:58

阅读数 8

评论数 0

Sprin容器的初始化

Spring的初始化Spring容器的初始化 Spring容器的初始化 在Tomcat容器启动时,会去加载web.xml配置文件。我们在配置文件中会有如下配置: <listener> <listener-class&...

2019-03-31 15:26:53

阅读数 19

评论数 0

一个Spring微型Ioc容器的分析

前言:之前看过<<Spring技术内幕>>有关IOC容器的讲解,无奈Spring的容器实现挺复杂,也没看懂。前几天无意中在git hub上看到了一个模仿Spring的IOC容器实现:tiny-ioc,麻雀虽小可五脏俱全,实现了Spring I...

2019-03-24 14:29:11

阅读数 31

评论数 0

redis-集合

集合 Redis的集合以无序的方式存储多个各不相同的元素。用户可以快速地向集合添加元素,或者从集合里面删除元素,也可以对多个集合进行集合运算操作,比如计算并集、交集和差集。 一、元素操作 1.添加元素 SADD key element [element...] 将一个或多个元素添加到给定...

2018-12-25 21:48:22

阅读数 22

评论数 0

redis-列表

一个列表可以包含一个或以上数量的项,每个项按照它们被推入到列表的位置来排列。每个列表项所处的位置决定了这个项的索引值,索引以0为开始,从列表的左端到右端依次递增,位于列表最左端的项的索引为0,而位于列表最右端的项的索引为N-1,其中N为列表的长度。列表包含的项是可以出现重读,它们不必是唯一的。 ...

2018-12-05 21:11:18

阅读数 37

评论数 0

redis-散列

一个散列由多个域值对组成,散列的域和值都可以是文字、整数、浮点数或者二进制数据。同一个散列里面的每个域必须是独一无二、互不相同的,而域的值则没有这一要求,换句话说,不同域的值可以是重复的。通过命令,用户可以对散列执行设置域值对、获取域的值、检查域是否存在等操作,也可以让Redis返回散列包含的所有...

2018-11-30 20:44:45

阅读数 15

评论数 0

redis-字符串

字符串,Redis中最简单的数据结构,它既可以存储文字(比如"hello world"),又可以存储数字(比如整数10086和浮点数3.14),还可以存储二进制数据(比如 1001)。 一、基本操作 1.为字符串设置值 SET key value 将字符...

2018-11-25 21:41:12

阅读数 28

评论数 0

redis-简介

1.诞生 redis是antirez为解决LLOOGG.com网站的程序性能严重受治制于MySql这种依赖磁盘存储的数据库而开发的,基于内存的一款数据库软件。 2.redis的特色 (1)独特的键值对模型 (2)内存存储,速度极快 一般硬盘存储的数据库,需要根据一个内存中的索引,再从...

2018-11-11 17:37:18

阅读数 17

评论数 0

Java并发编程-线程池

1.线程池概述     什么是线程池?     为什么使用线程池即线程池的优势?     (1)降低资源消耗,通过重复利用已创建的线程降低线程创建和销毁造成的消耗。     (2)提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。     (3)提高线程的可管理性,线程是稀缺资源...

2018-09-07 15:48:56

阅读数 33

评论数 0

Java并发编程-CopyOnWriteArrayList原理

1.CopyOnWriteArrayList是一个ArrayList线程安全的变体,它的所有改变底层数组的方法如(add,set等)通过复制底层数组来实现。这原本很消耗性能,但当遍历操作远远多于修改操作时,可能会比其他方法更高效,当你不想同步遍历操作时这种实现可能会有用。你需要排除并发线程之间的冲...

2018-08-21 15:51:47

阅读数 20

评论数 0

Java并发编程-ForkJoin框架

1.ForkJoin框架是一个为了发挥多核CPU优势,充分利用CPU资源的一个任务并行执行框架,它可以将一个大任务拆分成若干个子任务,然后再由子任务合并最终得到执行结果。 2.示例代码 public class Demo extends RecursiveTask<Int...

2018-08-07 09:02:10

阅读数 27

评论数 0

Java虚拟机-常见的内存语义的分析

1.锁的释放与获取所建立的happens-before关系: public class Demo {     private int value;     public synchronized void a() {         value++;  //1     }      publi...

2018-08-06 19:44:34

阅读数 45

评论数 0

Java虚拟机-指令重排序

1.什么是指令重排序  编译器和处理器为了代码的执行效率会对指令进行重新排序,我们称之为重排序。 public class Demo {     private int a;     private int b;     private int c;     public void a() ...

2018-08-06 19:14:55

阅读数 152

评论数 0

Java虚拟机-happens-before规则

1.happens-before规则        Happen-before是用来指定两个操作之间的执行顺序,提供跨线程的内存可见性。在Java内存模型中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必然存在happen-before关系。Happen-before规则如下:...

2018-08-06 19:06:33

阅读数 33

评论数 0

Java并发编程-Future提前完成任务

1.Jdk自带Future模式 类图:        从类图中可以看出,RunnableFuture接口继承了Future和Runnable接口,而FutureTask类实现了RunnableFuture接口。所以FutureTask具有Future和Runnable的所有特性。Futur...

2018-08-05 09:39:42

阅读数 60

评论数 0

Java虚拟机-方法调用

1.什么是方法调用 方法调用并不等同于方法的执行,方法调用阶段的唯一任务就是确定被调用方法的版本。 2.解析调用       在编译期间就能够确定调用方法的版本称为解析调用。什么样的方法能够在编译期间就确定版本呢?静态方法 ,构造方法, final修饰的方法都能够在编译期间就确定其版本。 ...

2018-07-30 19:16:13

阅读数 61

评论数 0

Java并发编程-同步工具类

1.CountDownLatch         一个同步器辅助类允许一个或多个线程等待直到其他线程的一系列操作结束。一个CountDownLatch初始化时需要给定一个计数值。await方法阻塞直到当前计数值由于countDown方法的调用减为0,在此之后,所有等待的线程被释放,并且随后awa...

2018-07-29 11:21:39

阅读数 104

评论数 0

Java虚拟机-虚拟机字节码执行引擎

1.运行时栈帧结构        栈帧也叫过程活动记录,是编译器用来进行方法调用和方法执行的一种数据结构,它是虚拟机运行时数据区域中的虚拟机栈的栈元素。栈帧中包括局部变量表,操作数栈,动态链接和方法返回地址以及额外的一些附加信息,在编译过程中,局部变量表的大小已经确定,操作数栈深度也已经确定,因此...

2018-07-24 20:50:44

阅读数 136

评论数 1

Java并发编程-ThreadLocal线程局部变量的使用和原理

1.什么是ThreadLocal        ThreadLocal顾名思义是线程局部变量。这种变量和普通的变量不同,这种变量在每个线程中通过get和set方法访问, 每个线程有自己独立的变量副本。线程局部变量不存在多个线程同时对同一个变量的操作,所以不会有线程安全问题。 2.ThreadL...

2018-07-21 17:01:26

阅读数 66

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭