摘要: 线程安全性 不要跨线程共享变量 使状态变量为不可变的 在任何访问状态变量的时候同步 原子性 锁 内部锁在java中扮演了互斥锁的角色。意味着至多有一个线程可以拥有锁,其他线程访问必须等待或者阻塞。 内部锁是可重入的,因此线程在获取他自己占有的锁时,请求会成功。重新进入意味着所有请求是“每线程”的而不 阅读全文
posted @ 2018-08-22 18:04 cello_ist 阅读(1092) 评论(0) 推荐(0) 编辑
摘要: 当容器已经载入了BeanDefinition的信息完成了初始化,我们继续分析依赖注入的原理,需要注意的是依赖注入是用户第一次向IOC容器获取Bean的时候发生的,这里有个例外,那就是如果用户在BeanDefinition里面指定了lazy-init属性完成预实例化,那么依赖注入的过程则在初始化过程中 阅读全文
posted @ 2017-10-15 16:41 cello_ist 阅读(182) 评论(0) 推荐(0) 编辑
摘要: 在DefaultListAbleBeanFactory中通过一个HashMap持有载入的BeanDefinition信息 ,这个HashMap的定义在DefaultListAbleBeanFactory中可以看到: 将解析得到的BeanDefinition向IOC容器beanDefinitionMa 阅读全文
posted @ 2017-10-15 16:40 cello_ist 阅读(275) 评论(0) 推荐(0) 编辑
摘要: 1. 对IOC容器来说这个载入过程就像是相当于把BeanDefinition定义的信息转化成Spring内部表示的数据结构。容器对bean的管理和依赖注入过程都是通过对其持有的BeanDefinition进行各种相关操作完成的,这些BeanDefinition在容器内部通过一个HashMap来维护。 阅读全文
posted @ 2017-10-15 16:38 cello_ist 阅读(300) 评论(0) 推荐(0) 编辑
摘要: Spring通过ResourceLoader来处理得到的Resource。在前面我们知道容器初始化是以refresh()方法为入口的,内部的实现首先准备上下文,然后通过obtainFreshBeanFactory()方法获取beanFactory, 进入AbstractRefreshableAppl 阅读全文
posted @ 2017-10-15 16:36 cello_ist 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 1. IOC容器的初始化过程:IOC容器的初始化由refresh()方法启动,这个启动包括:BeanDifinition的Resource定位,加载和注册三个过程。初始化的过程不包含Bean依赖注入的实现。 第一个过程是Resource的定位过程。这个Resource的定位指的是BeanDefini 阅读全文
posted @ 2017-10-15 16:22 cello_ist 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 1. SpringIOC提供了一个基本的javabean容器,通过IOC模式管理依赖关系,并通过依赖注入和AOP增强了为javabean这样的pojo对象赋予事务管理,生命周期管理等基本功能。2. SpringIOC容器中注入方式有setter注入,构造器注入,接口注入,其中setter注入和构造器 阅读全文
posted @ 2017-10-15 16:21 cello_ist 阅读(168) 评论(0) 推荐(1) 编辑
摘要: 参考博客1:http://www.cnblogs.com/exe19/p/5359885.html参考博客2:http://www.jianshu.com/p/87bff5cc8d8c 1 . 线程池的体系结构 2 .线程池的使用 3 . ThreadPoolExecutor类 构造方法 publi 阅读全文
posted @ 2017-07-17 18:25 cello_ist 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 1 . wait() 方法使当前执行代码的线程进行等待,将当前线程置入"预执行队列",并且在wait()方法所在处停止执行,直到接到通知或者中断。 在调用wait之前,线程必须获得该对象的对象级别锁,即只能在同步方法或者同步代码块中才能调用wait方法。 调用wait()方法后当前线程自动释放锁。在 阅读全文
posted @ 2017-07-17 18:21 cello_ist 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 1 . 多个线程访问多个对象JVM会创建多个锁。2 . 静态方法是以类为单位进行同步的——对于同一个类中的所有静态方法,在同一时间内,只允许有一个线程执行其中的一个静态方法,其余想要进入这些方法的线程都必须挂起等待。非静态方法是以对象为单位进行同步的。3 .假设现有两个线程A和B,一个object对 阅读全文
posted @ 2017-07-17 18:17 cello_ist 阅读(1317) 评论(0) 推荐(0) 编辑
摘要: 一 . 在java中有以下三种方法可以停止正在运行的线程: 1 . 使用退出标志使线程正常退出,也就是当run方法完成后线程终止2 . 使用stop() 方法强行终止线程,但是不推荐这么做,因为stop()方法和suspend()及resume()方法一样是不安全的,使用它们可能产生不可预料的结果3 阅读全文
posted @ 2017-07-17 15:23 cello_ist 阅读(219) 评论(0) 推荐(0) 编辑
摘要: StringBuilder与StringBuffer的功能基本相同,不同之处在于StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此效率上StringBuilder类更高,但是在多线程环境中则应该使用StringBuffer,String类是final的,所有改变S 阅读全文
posted @ 2017-07-17 11:31 cello_ist 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 1.JVM管理的内存包含下图所示的几个运行时数据区域,其中方法区和堆为线程共享的数据区域,程序计数器,虚拟机栈以及本地方法栈为线程私有的数据区域。 程序计数器:可以看做是当前线程所执行的字节码的行号指示器,告诉字节码解释器该读取哪条指令 虚拟机栈:生命周期和线程相同,每个方法在执行的同时都会创建一个 阅读全文
posted @ 2017-07-17 11:24 cello_ist 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 一 . 类加载机制 类加载机制是指.class文件加载到jvm并形成Class对象的机制。之后应用可对Class对象进行实例化并调用。类加载机制可在运行时动态加载外部的类,还可以达到类隔离的效果。 类从而加载到虚拟机中开始,整个过程分为下图七个阶段,其中验证,准备,解析统称为解析。图中加载,验证,准 阅读全文
posted @ 2017-07-17 11:24 cello_ist 阅读(312) 评论(0) 推荐(0) 编辑
摘要: 参考博客: 深入理解mybatis原理: http://blog.csdn.net/luanlouis/article/details/40422941 一 . JDBC的工作流程: 加载数据库的驱动程序->创建数据连接对象->创建Statement对象->执行SQL语句->处理返回结果集->关闭数 阅读全文
posted @ 2017-07-17 11:21 cello_ist 阅读(1789) 评论(0) 推荐(0) 编辑