31-35
线程池中线程的复用原理
线程池将线程和任务进行解语,线程是线程任务是任务,摆脱了之前通过thread方法创建线程时候,必须对应一个任务的限制。
在线程池中同一个线程,可以从阻塞队列中不断地获取新的任务进行执行,其核心原理在于线程池对thread进行了封装,并不是每次执行任务都会调用Theard。start方法来创建新的线程,而是让每个线程去执行一个循环任务,在这个循环任务中不断地检查是不是还有任务需要被执行,有的话就直接run,将run()方法当作一个普通的方法进行执行,通过这种方式的话就可以使用一个固定的线程就将所有人物的run方法串联起来了。
用线程调用任务里面的run而不是线程的run
spring是什么?
轻量级开源的j2ee框架,是一个容器框架用来装JavaBean,中间层框架,起一个链接作用,
(1)spring从大小和开销两方面spring是轻量级的
(2)通过控制反转ioc达到松融合的目的
(3)提供了面向切面编程的丰富支持aop,允许通过分离应用的业务逻辑与系统服务进行内聚是开发。
(4)包含并管理应用对象(bean)的配置和生命周期,这就是意义上的一个容器
(5)将简单的组件配置、组合为复杂的应用这就是一个框架
谈一下aop的理解
系统是由许多不同的组件组成的,每一个组件各负责一块特定的功能,这些组件除了要实现自己的核心功能还要承担额外的职责。
当我们需要为分散的对象引入公共行为是,oop(面向对象)就无能为力,oop只允许定义从上倒下的关系,不适合实现从左到右,例如日志功能。
比如打印日志功能,如果用oop那么就会导致打印功能大量重复,不利于代码的复用。
Aop就是把程序中交叉的业务逻辑,封装成一个切面,然后注入目标对象中。aop可以对某个对象或者某个对象的功能进行增强,可以在做某个方法之前额外做一些,或者某个方法之后在额外做一些。
对ioc的理解
容器概念、控制反转、依赖注入
BeanFactory和ApplicationContext区别
ApplicationContext是子接口,扩展
ApplicationContext有更加完整的功能
BeanFactory延迟加载注入bean当使用到的时候才会对bean加载实例化。这样我们就能发现一些存在的spring配置问题,只有运行之后才可以发现。
ApplicationContext一次性创建所有的bean,这样在启动时就可以发现spring配置错误,这样有利于检查所有的依赖属性是否注入。当你使用的时候你不用等待因为已经给你加载好了。
相对于ApplicationContext,bean的话就是少占用一部分内存空间,启动的快一点。
BeanFactory一般用变成的方式创建,ApplicationContext还可以用申明的方式创建,contextloader.
BeanFactory、ApplicationContext都可以使用beanpostprocessor、beanFactorypostprocessor,但是BeanFactory要手动注册ApplicationContext是自动注册。