java并发编程(4)--线程池设计及注意问题
来源:互联网 发布:苏州网络耗材批发 编辑:程序博客网 时间:2024/06/08 01:22
本文转载自:http://blog.csdn.net/tianxiaogang12/article/details/5942906 尊重原创
一般一个简单线程池至少包含下列组成部分。
关于高级线程池的探讨
简单线程池存在一些问题,比如如果有大量的客户要求服务器为其服务,但由于线程池的工作线程是有限的,服务器只能为部分客户服务,其它客户提交的任务,只能在任务队列中等待处理。一些系统设计人员可能会不满这种状况,因为他们对服务器程序的响应时间要求比较严格,所以在系统设计时可能会怀疑线程池技术的可行性,但是线程池有相应的解决方案。调整优化线程池尺寸是高级线程池要解决的一个问题。主要有下列解决方案:
方案一:动态增加工作线程
在一些高级线程池中一般提供一个可以动态改变的工作线程数目的功能,以适应突发性的请求。一旦请求变少了将逐步减少线程池中工作线程的数目。当然线程增加可以采用一种超前方式,即批量增加一批工作线程,而不是来一个请求才建立创建一个线程。批量创建是更加有效的方式。该方案还有应该限制线程池中工作线程数目的上限和下限。否则这种灵活的方式也就变成一种错误的方式或者灾难,因为频繁的创建线程或者短时间内产生大量的线程将会背离使用线程池原始初衷–减少创建线程的次数。
举例:Jini中的TaskManager,就是一个精巧线程池管理器,它是动态增加工作线程的。SQL Server采用单进程(Single Process)多线程(Multi-Thread)的系统结构,1024个数量的线程池,动态线程分配,理论上限32767。
方案二:优化工作线程数目
如果不想在线程池应用复杂的策略来保证工作线程数满足应用的要求,你就要根据统计学的原理来统计客户的请求数目,比如高峰时段平均一秒钟内有多少任务要求处理,并根据系统的承受能力及客户的忍受能力来平衡估计一个合理的线程池尺寸。线程池的尺寸确实很难确定,所以有时干脆用经验值。
举例:在MTS中线程池的尺寸固定为100。
方案三:一个服务器提供多个线程池
在一些复杂的系统结构会采用这个方案。这样可以根据不同任务或者任务优先级来采用不同线程池处理。
举例:COM+用到了多个线程池。
这三种方案各有优缺点。在不同应用中可能采用不同的方案或者干脆组合这三种方案来解决实际问题。
线程池技术适用范围及应注意的问题
下面是我总结的一些线程池应用范围,可能是不全面的。
线程池的应用范围:
连接:http://www.ibm.com/developerworks/cn/java/l-threadPool/
- java并发编程(4)--线程池设计及注意问题
- 线程池设计及注意问题
- java线程编程注意问题
- java并发编程(一)-并发编程需要注意问题
- Java并发编程:线程池创建及源码分析
- java并发编程:线程池
- Java并发编程:线程池
- Java并发编程 线程池
- java并发编程---线程池
- Java并发编程:线程池
- Java并发编程:线程池
- 【Java并发编程】线程池
- java并发编程--线程池
- java并发编程-java线程池
- Java并发编程4.1-设计线程安全的类
- JAVA并发编程(三)设计线程安全的类
- Java并发编程规则:设计线程安全的类
- Java并发编程的艺术(一)——并发编程需要注意的问题
- 字符串复制中的while条件
- svn revert
- lightoj1045 - Digits of Factorial
- knn算法python实现
- CodeForces - 581A Vasya the Hipster (水)
- java并发编程(4)--线程池设计及注意问题
- RADIUS协议
- SWT概述
- 1.latch之latch redo allocation
- 第四课 初识系统调用
- android开发之提高应用启动速度_splash页面瞬间响应_避免APP启动闪白屏
- 2.latch之oracle latch
- 如何模拟cursor pin S
- 工具类Log