Spring IOC源码分析(一)

ps:整个系列之前使用有道云整理的,所以代码都是截图格式 1.相关类介绍 1.1 Resource类 Resource类是Spring对资源的抽象。它的每一个实现类都代表了一种资源的访问策略,如 ClassPathResource、RLResource、FileSystemResource ...

2019-05-16 11:22:52

阅读数 1

评论数 0

JVM运行时数据区域

以下所有内容摘自《深入理解Java虚拟机》第二版                Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。...

2018-10-24 12:50:36

阅读数 28

评论数 0

队列同步器

1.队列同步器简介     队列同步器AbstractQueuedSynchronizer(以下简称同步器),是用来构建锁或者其他同步组件的基础框架,它使用了一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作,并发包的作者(Doug Lea)期望它能够成为实现大部...

2018-08-06 17:42:22

阅读数 33

评论数 0

数据库事务隔离级别

数据库事务的隔离级别有4个,由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。 1.Read uncommitted 读未提交 公司发工资了,领导把...

2018-08-04 17:08:56

阅读数 32

评论数 0

B树和B+树简介

一.B树 一种平衡的多叉树,称为B树(或B-树、B_树)。 一棵m阶B树是一棵平衡的m路搜索树。它或者是空树,或者是满足下列性质的树: 1、根结点至少有两个子女; 2、每个非根节点所包含的关键字个数 j 满足:m/2 - 1 <= j <= m ...

2018-08-04 13:12:06

阅读数 175

评论数 0

贪婪算法的小例子记录

一 定义        贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。        贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状...

2018-08-04 13:11:54

阅读数 241

评论数 0

Java双重检查锁的错误

1.错误的双重检查锁实现 public class DoubleCheckedLocking { // 1 private static Instance instance; // 2 public static Instance getInstance() { // 3 ...

2018-07-26 20:33:55

阅读数 131

评论数 1

Final域的重排序规则

*摘自《Java并发编程的艺术》——方腾飞 1.final类型为基本类型时 对于final域,编译器和处理器要遵守两个重排序规则。 1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。 2)初次读一个包含final域的对象的引用,...

2018-07-26 18:36:42

阅读数 350

评论数 0

volatile的特性

*摘自《Java并发编程的艺术》——方腾飞 1.volatile的特性         理解volatile特性的一个好方法是把对volatile变量的单个读/写,看成是使用同一个锁对这些单个读/写操作做了同步。下面通过具体的示例来说明,示例代码如下。 class VolatileFeat...

2018-07-25 20:07:51

阅读数 188

评论数 0

Java5及以上版本中对内存读写的原子性

从JSR-133内存模型开始(即从JDK5开始),仅仅只允许把一个64位long/double型变量的写操作拆分为两个32位的写操作来执行,任意的读操作在JSR-133中都必须具有原子性(即任意读操作必须要在单个读事务中执行)...

2018-07-25 18:13:07

阅读数 45

评论数 0

happens-before,内存重排序,数据依赖的理解

在JMM(Java内存模型)中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须存在happens-before关系。 happens-before原则规则: 程序次序规则:一个线程内,按照代码顺序,书写在前面的操作先行发生于书写在后面的操作; 锁定规则:一个unLock操...

2018-07-24 12:43:13

阅读数 201

评论数 0

Redis集群批量操作

      众所周知,Redis集群是没法执行批量操作命令的,如mget,pipeline等。这是因为redis将集群划分为16383个哈希槽,不同的key会划分到不同的槽中。但是,Jedis客户端提供了计算key的slot方法,已经slot和节点之间的映射关系,通过这两个数据,就可以计算出每个k...

2018-07-23 17:32:22

阅读数 1445

评论数 0

Redis相关问题和解决方法记录

1.缓存穿透         缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命中。所以每次查询这条数据的时候,都先查一遍缓存,然后再查一遍数据库。解决的办法是,在缓存中保存一个空值,来标记该数据在数据库中不存在,同时给该值设置一个较短的过期时间,防止被恶意攻击时产生太多的key。 ...

2018-07-23 16:53:40

阅读数 86

评论数 0

Java泛型理解

Java集合工具类Collections里定义了sort方法,里面的泛型很有意思:<T extends Comparable<? super T>> 对于这个泛型,我们来理解一下: 首先,泛型T是要继承Co...

2018-07-19 13:18:09

阅读数 144

评论数 0

Java泛型集合理解

1.只读集合 使用<? extends T>定义的集合,只能读取,不能插入。原因是什么呢?我们从头开始分析: 首先,我们知道,<? extends T>修饰的集合,表示该集合内部的元素类型只能是T或者是T的...

2018-07-19 12:50:47

阅读数 190

评论数 0

java四种引用

1.强引用 强引用指向的对象,在任何时候都不会被回收。除非将引用置为null /** * 强引用 */ public class StrongReferences { public static void main(String[] args) { //创建一个对象,ne...

2018-07-18 12:00:13

阅读数 36

评论数 0

volatile关键字修饰对象时注意事项

下面的代码实现无锁循环打印A,B,C的功能,但是volatile关键字用错的话,会导致数据不打印1.当volatile修饰公共的成员变量时public class ThreadTest { private static volatile C c = new C(); public sta...

2018-07-10 18:30:40

阅读数 1328

评论数 0

线程池参数理解

之前学习的并发知识,现在记录一下 主要参数说明 线程池(ThreadPoolExecutor),Jdk1.5版本开始使用,构造方法参数如下(来自ThreadPoolExecutor源码): corePoolSize:核心线程数,线程池启动时就会创建的线程数量。即使核心线程是空闲的,也不会被回...

2018-07-02 18:15:03

阅读数 2280

评论数 0

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