发布者:上海IT外包来源:http://www.lanmon.net点击数:1258
初学者一目了然的线程池
线程池是管理线程的工具,用于维护多个线程,减少资源消耗,提高系统性能。
另外,通过使用线程池,开发人员可以集中于任务代码,而不是管理线程如何执行,从而实现任务的提交和执行的解薯。
这篇文章介绍了线程池。
什么是线程池
线程池的使用方法
线程池Thread Pool
线程池是一种池化技术,包括数据库连接池、HTTP连接池等。
游泳池化的思想主要是为了减少资源的获取和每结束的消费,提高资源的利用率。
比如,远距离打水不方便,大家每小时把水放在池塘里,平时用的时候直接来取就行了。
同样,线程池也创建了用于统一管理线程的池,因为每次创建和销毁线程时都需要消耗系统资源。 用的时候从池塘里拿来,不用也能回来,你也不需要销毁,方便吗?
Java线程池由JUC JAVA.UTIL.concurrent包实现,最重要的是名为ThreadPoolExecutor的类。 具体怎么用我们再说?
线程池的好处
多线程的第一篇文章说,由于进程申请资源,拿来用于线程,线程占用系统资源,所以只要使用线程池统一管理线程,就能很好地解决这个资源管理问题。
例如,因为不需要创建和销毁线程,所以每次需要都去取,用完后再放回去,所以可以节约很多资源开销,提高系统的运行速度。
集成的管理和时间表使您可以合理分配内部资源,根据系统的现状调整线程数。
那个总结有以下三个优点
减少资源消耗:通过重复使用现有线程来执行任务,避免多次创建和销毁线程。
提高适当的速度—不需要创建线程的步骤,因此在获得任务时可以立即开始执行。
提供附加功能:线程池的可扩展性允许您自己添加新功能(如调度和延迟),以执行特定线程。
说了这么多,终于是今天的重点了。 让我们看看怎么用线程池。
线程池的实现
Java提供了一个Executor接口,用于使用线程池。
Executor
我们经常使用的线程池有两类:
ThreadPoolExecutor
ScheduledThreadPoolExecutor两个人的区别是,第一个很正常,第二个可以定时执行。
当然,其他线程池,例如JDK 1.7刚出现的ForkJoinPool,可以把大任务分割成小任务执行,最后大统一。
那么,如果任务提交到线程池,将经历什么过程呢?
执行过程
线程池在内部实际采用了生产者消费者模型(还不知道该模型文章开头有改文章的链接),解决了线程和任务,线程池同时管理了任务和线程。
首先检查核心线程池是否已满。 该核心线程池是线程池始终保持的线程池,与用户量无关。 例如,线程池的总容量最多可以容纳100个线程,而核心线程池设置为50时,50个线程将继续存在,而与用户数量无关。 这个数字当然是根据具体的业务需要决定的。
块队列是BlockingQueue,生产者消费者的这一节提到了。
最后判断线程池是否已满的是判断是否有100个线程而不是50个。
如果已经满了,无法继续创建线程,则必须用称为饱和或拒绝策略的方法处理。 关于这个饱和战略将在后面叙述。
文/上海蓝盟 IT外包专家
分享到: