Java中的线程池以及数据库连接池
1、 线程池
我们知道,我们不可能无限的创建线程,而且线程的创建与销毁有一定的时间消耗,线程池技术正是避免了每次创建线程时,都要创建线程,而是直接从线程池中基本线程执行任务当然还有很多细节在里面。
CorePoolSize 当提交一个任务到线程池中时候,线程池会创建一个线程来执行任务,如果当前的线程池中的线程数大于线程池基本大小时,就不在创建。
MaxmumPoolSize 线程池最大大小,线程池所允许的最大线程数。当任务队列满的时候,并且当前线程数小于最大线程数,那么线程池会再创建出新的线程执行任务。
KeepAliveTime 线程存活时间,当一个工作线程空闲时候,保持存活的时间。
基本流程:
当一个任务被提交的时候,首先判断该线程池中的线程数是否小于corePoolSize,若小于创建新线程,若大于,判断当前线程池的阻塞队列是否满,若不满则放入 阻塞队列,若满则判断当前存活线程数是否大于MaxPoolSize若小于开启非核心线程,若大于则有相关处理器处理。
线程池 是如何实现线程复用的
我们知道线程是有自己的生命周期的,new ready runnable blocking dead ,要实现线程的复用必须是的线程可以一直处于 就绪 阻塞或者运行状态。从而可以使得线程一直可以从 队列中取出任务执行,没有任务时阻塞。
2、数据库连接池
数据库连接池与线程池的思想仍然是一样的,同样是把昂贵的资源在初始化的时候就可以创建起来然后一直维护。当我们请求数据库连接的时候,如果有空闲的连接就可以直接使用,完事后不是关闭而是直接返回给连接池。如果没有空闲的连接,那么会查看当前连接数是否超过了最大连接数,没有则新建一个连接,有的话就抛出用户异常。
本文介绍了Java中的线程池技术,包括线程池的基本参数如CorePoolSize、MaxmumPoolSize和KeepAliveTime等,以及线程复用的原理。同时,文章还探讨了数据库连接池的工作机制,例如如何在请求数据库连接时分配空闲连接,以及如何处理超过最大连接数的情况。
6116

被折叠的 条评论
为什么被折叠?



