- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java并发编程技术 欧阳宏基 本章内容 1.线程池的概念与工作原理 2. Executor并发编程框架以及线程池执行策略 3. Future与Callable 4. 线程锁 5. 利用Condition实现线程间通信 6. 阻塞队列 * 线程池的概念与工作原理 为什么使用线程池: 假设在一台服务器完成一项任务的时间为TT1 创建线程的时间T2 在线程中执行任务的时间,包括线程间同步所需时间T3 线程销毁的时间 那么T = T1+T2+T3。 T1,T3是多线程本身的带来的开销,希望减少T1,T3所用的时间,从而减少T的时间。如果在程序中频繁的创建或销毁线程,这导致T1和T3在T中占有相当比例。显然这是突出了线程的弱点(T1,T3),而不是优点(并发性)。 线程池技术正是关注如何缩短或调整T1,T3时间的技术,从而提高服务器程序性能的。它把T1,T3分别安排在服务器程序的启动和结束的时间段或者一些空闲的时间段,这样在服务器程序处理客户请求时,不会有T1,T3的开销了。 * 线程池的概念与组成部分 线程池:一种管理一定数量线程的手段,线程池中的线程数量是由运行时机器容量、负载的配置信息以及动态信息决定。应用程序在启动时创建一定数量的线程放入线程池,线程池通过将需要并发运行的任务放入到任务队列中等待空闲线程来处理。 组成部分: (1) 线程池管理器(ThreadPoolManager):用于创建并管理线程池 (2) 工作线程(WorkThread): 线程池中线程 (3) 任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行。 (4) 任务队列:用于存放没有处理的任务。提供一种缓冲机制。 * 线程池的工作原理 创建线程池 要设计一个线程池至少要考虑以下几个方面: ①对任务进行描述的类,包含线程池中线程执行的所有信息。 ②可动态变化的、保存任务的队列。 ③线程池管理器,用来创建、销毁线程池,提供对任务的调用与转发。 ④处理任务的工作线程类。 ⑤查询线程,用来检测任务的完成情况。 ⑥拒绝策略。 自定义线程池还是具有相当大难度的 JDK自带的线程池 核心线程池对象- ThreadPoolExecutor ThreadPoolExecutor是线程池体系中的核心类,用来创建和维护线程池对象。主要属性如下: corePoolSize:核心线程数量(包括空闲线程) maximumPoolsize: 线程池中能创建的最大线程数 keepAliveTime: 当线程数大于核心数时, 空闲线程被销毁前等待任务的最长时间 unitkeepAliveTime: 参数的时间单位 workQueue: 保存任务的队列,任务实现Runnable接口,由Execute方法调用执行 threadFactory:创建线程对象所使用的工厂。 handler:由于超出线程范围和队列容量而使执行任务被阻塞时采用的处理程序 见源文件:ThreadPoolExecutorTest.java 线程池的执行策略 执行策略是一种资源管理方式,通过限制并发的数量来确保应用程序不会由于资源耗尽而失败。 执行策略主要从执行任务的线程、任务的执行顺序、任务并发执行的个数、任务队列中等待执行的个数、对哪个任务进行拒绝并如何通知应用程序等方面来定义任务的执行,从而确保应用程序具有较好的性能。 线程池的执行策略 Executors通过工厂方法提供了四种执行策略来管理工作线程,分别是: ①newSingleThreadExecutor:确保所有任务按照提交的先后顺序由唯一工作线程来执行。 ②newFixedThreadPool:线程数量是固定的,随着任务的提交而一一创建,直到数量达到最大值。 ③newCachedThreadPool:一个可缓存的线程池,线程池大小完全依赖于操作系统(或者JVM)能够创建的最大线程数,并且能根据当前任务的数量来调整线程池中线程的个数,适合于执行生存周期较短的异步任务。 见源文件:ThreadPoolTest.java ④newScheduledThreadPool:创建一个大小无限的线程池。此线程池支持定时以及周期性执行任务的需求。 见源文件:ScheduledThreadPoolTest.java Callab
文档评论(0)