- 线程池原理和7个参数,说说项目中哪些地方用到线程池了,怎么用的,解决什么问题:
7个参数:最大线程数 核心线程数 最大线程空闲生存时间 时间单位 任务队列 线程工厂 拒绝策略(discardpolicy abortpolicy discardoldestpolicy callerunspolicy )
原理:
当用户向线程池提交一个任务(也就是线程)时,线程池会先将任务放入workQueue中。workerSet中的线程会不断的从workQueue中获取线程然后执行。当workQueue中没有任务的时候,worker就会阻塞,直到队列中有任务了就取出来继续执行。
线程池执行所提交的任务过程中:
1、先判断线程池中核心线程池所有的线程是否都在执行任务。 如果不是,则新创建一个线程执行
刚提交的任务,否则,核心线程池中所有的线程都在执行任务,则进入第2步;
2、判断当前阻塞队列是否已满,如果未满,则将提交的任务放置在阻塞队列中;否则,则进入第
3步;
3、判断线程池中所有的线程是否都在执行任务,如果没有,则创建一个新的线程来执行任务,否
则,则交给饱和策略进行处理。
使用场景:
图片上传,用户选择的图片上传大小格式都不一样的,但是显示出来的是一样的,也就是服器上面要保存两份图,一份是标准图,一份是用户上传的图,那么把用户上传的图片标准化的过程是使用线程池完成的(缩略图);下载报表;调用第三方接口的时候,因为第三方是不可控的;
解决问题:
资源管理问题:在并发环境下,系统无法确定任意时刻有多少任务需要执行和多少资源需要投入,这可能导致资源频繁申请和销毁,以及调度资源的额外消耗。
资源复用:线程池通过复用现有的线程来执行任务,避免多次创建和销毁线程,从而降低资源消耗。
提高响应速度:由于省去了创建线程的步骤,线程池可以立刻开始执行任务,从而提高系统的响应速度。
资源限制控制:线程池的关键参数如核心线程数和最大线程数量,有助于提高阻塞队列中任务的处理效率,避免资源利用率过高的问题。
- 什么是IOC,aop,他们的好处是什么,你哪个场景用了?
IOC:控制反转 控制:把创建使用的过程叫控制 反转:本来用的是new一个对象,现在反转就是把这个控制权交给spring容器。
1.好处:松耦合性 可维护性 可重用性。
2.应用场景:
对象创建:通过Spring容器管理对象的创建,例如创建数据源、Hibernate Session以及Service等。
松耦合:通过依赖注入管理对象之间的依赖关系,达到松耦合的效果,让开发者更容易编写测试和单元测试。
配置管理:通过配置文件管理应用程序的配置,例如数据源配置、日志配置等。
希望这些详细的解释能够更好地帮助你理解Spring AOP和IOC的原理和应用场景。
AOP:面向切面编程 就是在不修改源代码的基础上对代码进行增强。
1.好处:减少重复代码 维护方便 提高开发效率。
2.应用场景:
日志记录:记录方法的调用时间、参数信息等,用于问题排查和性能优化。
权限验证:对用户的请求进行拦截,校验用户权限,增加应用的安全性。
事务管理:统一管理数据库的事务,确保数据的一致性和完整性。
性能监控:统计方法的执行时间、资源消耗等,进行性能调优。
异常处理:捕获方法执行过程中的异常,并进行统一处理和日志记录。
- 事务失效的场景
- 慢Sql的优化
- SpringBoot启动流程