深入浅出多线程(5)以并行包线程池为例说说线程池的设计需求及使用
来源:互联网 发布:飞思卡尔编程软件k60 编辑:程序博客网 时间:2024/04/20 00:23
线程对象的创建和销毁是需要花费系统资源的,通过线程池,可以避免该问题并提高系统的响应时间。这种情形类似我们常提到的数据库连接池。
线程池的广泛应用使得在SUN在JDK1.5的工具包提供了线程池的支持。我计划将该系列分为设计需求与设计实现两个部分。这样会更加清晰。如果想要熟悉,并熟练应用线程池,那么通过设计需求篇也就是该篇就可以找到答案。如果想探究实现的细节,那么在设计实现篇会有深入的说明。
本文以Concurrent包线程池设计为例,讨论线程池的设计。
对于可配置可管理的需求,至少的提供以下的功能点:
2.上面就这些对于我们使用者而言,对线程池的需求,下面我们分析Concurrent包提供的线程池是否达到了我们的需求。
对于易用的需求。
Concurrent的Executors类,注意不是Executor接口,通过Factory模式提供了我们以下的基本的线程池,如果没有
特殊的需求,只需查阅这几个线程池JDK文档,就可以使用了。
对于可配置,可管理讲:
线程池的广泛应用使得在SUN在JDK1.5的工具包提供了线程池的支持。我计划将该系列分为设计需求与设计实现两个部分。这样会更加清晰。如果想要熟悉,并熟练应用线程池,那么通过设计需求篇也就是该篇就可以找到答案。如果想探究实现的细节,那么在设计实现篇会有深入的说明。
本文以Concurrent包线程池设计为例,讨论线程池的设计。
- 线程池需求
对于可配置可管理的需求,至少的提供以下的功能点:
- 线程池里,线程数量的配置。
- 能够提供动态调整线程的数量。
- 能够Shutdown 最好能够提供优雅的Shundown,而不是像我们通过切断电源关闭机器那样粗暴的Shutdown。
- 能够提供Task的状态,比如完成了多少,还有多少没有完成。
- 如果不能满足需要能够很容易的扩展。
- 对于线程池线程的创建能否提够扩展。
- 当提交的Task负载过大时,线程池的处理策略能否扩展。
2.上面就这些对于我们使用者而言,对线程池的需求,下面我们分析Concurrent包提供的线程池是否达到了我们的需求。
对于易用的需求。
Concurrent的Executors类,注意不是Executor接口,通过Factory模式提供了我们以下的基本的线程池,如果没有
特殊的需求,只需查阅这几个线程池JDK文档,就可以使用了。
- newFixedThreadPool 顾名思义,建立固定大小的线程池。
- newCachedThreadPool 根据需要动态的创建线程,该线程池我们在深入系列4做了讨论。
- newSingleThreadExecutor 如其名。
- newScheduledThreadPool 如其名,该线程池类似于JDK1.4 Timer提供的功能,但更完善,我会在随后的深入浅出系列讨论其不同 点。
对于可配置,可管理讲:
- 提供了可以配置线程池中线程的数量的功能。比如在创建newFixedThreadPool时,第一个参数就是线程池线程的数量,通过
- 该数量的配置,我们就可以保证不会因为线程的过多导致系统的崩溃。
- 提供了在运行时通过setCorePoolSize和setMaximumPoolSize方法来调整线程池数量的功能,两者的区别会在后续实现篇中说明。
- 提够了优雅的Shutdown,不在接受Task,将正在运行的Task执行完,处于等待状态的Task 中断。
- 提供getTaskCount和getCompletedTaskCount方法可以获取提交的Task和完成的Task数量。
- 我们可以参考Executors的Factory模式,扩展提供满足需要的线程池。
- 在构造方法中,提供ThreadFactory接口,我们可以实现自定义的创建线程池线程的方法。
- 提供了RejectedExecutionHandler接口,我们可以扩张该接口,提供当Task过多时,处理策略,目前默认为AbortPolicy策略Throw 一个RejectedExecutionException
- 深入浅出多线程(5)以并行包线程池为例说说线程池的设计需求及使用
- 深入浅出多线程(5)以并行包线程池为例说说线程池的设计需求及使用
- android 多线程 - 并行包线程池为例说说线程池的设计需求及使用
- android 多线程 - 并行包线程池为例说说线程池的设计需求及使用
- 深入浅出多线程(6)分析并行包线程池的设计与实现
- 深入浅出多线程(6)分析并行包线程池的设计与实现
- 以Android环境为例的多线程学习笔记(五)------------线程池
- 多线程及线程池
- 以Android环境为例的多线程学习笔记(一)------- 线程的创建
- 深入浅出Win32多线程设计之MFC的多线程-线程与消息队列(经典)
- 黑马程序员-------------多线程中的(线程、线程组、线程池、以及Java的设计模式)概念及方法的总结
- 将并行线程块修改为使用并行线程时的矢量相加
- 说说Java线程池
- 说说Java线程池
- 浅谈.NET下的多线程和并行计算(五)线程池基础上 (转)
- 浅谈.NET下的多线程和并行计算(六)线程池基础下 (转)
- Java并发包使用及源码浅析(线程池)
- java线程池使用及设计
- 观察者模式
- 给wince驱动/应用初学者推荐的书籍
- 深入浅出多线程(4)对CachedThreadPool OutOfMemoryError问题的一些想法
- domino数据库存取控制列表(acl)基本知识_lotus notes
- 见证Spring Jdbc的强大
- 深入浅出多线程(5)以并行包线程池为例说说线程池的设计需求及使用
- ASP.NET 状态服务 及 session丢失问题解决方案总结
- Linux 引导过程内幕 - 从主引导记录到第一个用户空间应用程序的指导
- 英语学习
- 深入浅出多线程(6)分析并行包线程池的设计与实现
- flex中表格第一列固定
- DataSet更新到数据库总结
- 在SWT下实现BorderLayout布局
- 向你的老婆解释REST