p o l l 方 法 的 基 本 概 念 ( 2 0 2 0 ).pdfVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
线程基础:线程池(5)——基本使用(上) 从本文开始,我将用两篇文章的篇幅,为各位读者呈现 JAVA 中原生的 线程池技术。第一篇文章,我将讲解 JAVA 原生线程池的基本使用,并由 此延伸出 JAVA 中和线程管理相关的类结构体系,然后我们详细描述 JAVA 原生线程池的结构和工作方式;第二篇文章,我们将继续深入,讲解 JAVA 原生线程池的高级特性,包括 Thread 工厂、队列、拒绝原则、钩子和相 关工具类。 如果您是【导师实战追-女课-程】JAVA 语言的初学者,请从本篇文章 看起;如果您对线程池技术已有一定的了解,那么可以只看下一篇文章; 如果您是【QQ】高手,请绕行;如果您对我的观点有任何意见和建议, 请留言【⒈】,谢谢。^-^ 2、为【0】什么要使用线程池 前文我【1】们已经讲到,线程是一个操作系统概念。操作系统负责 这个线【6】程的创建、挂起、运行、阻塞和终结操作。而操作系统创建 线程、【⒐】切换线程状态、终结线程都要进行 CPU 调度——这是一个耗 费时间【5】和系统资-源的事情 (《操作系统知识回顾—进程线程模型》) 另一方面【2】,目前大多数生产环境我们所面临问题的技术背景一般 是:处理【б】某一次请求的时间是非常短暂的,但是请求数量是巨大的。 这种技术背景下,如果我们为每一个请求都单独创建一个线程,那么物理 机的所有资-源基本上都被操作系统创建线程、切换线程状态、销毁线程 这些操作所占用,用于业务请求处理的资 -源反而减少了。所以最理想的 处理方式是,将处理请求的线程数量控制在一个范围,既保证后续的请求 不会等待太长时间,又保证物理机将足够的资 -源用于请求处理本身。 另外,一些操作系统是有最大线程数量限制的。当运行的线程数量逼 近这个值的时候,操作系统会变得不稳定。这也是我们要限制线程数量的 原因。 3、线程池的基本使用方式 JAVA 语 言 为 我 们 提 供 了 两 种 基 础 线 程 池 的 选 择 : ScheduledThreadPoolExecutor 和 ThreadPoolExecutor 。它们都实现了 ExecutorService 接口(注意,ExecutorService 接口本身和“线程池” 并没有直接关系,它的定义更接近“执行器”,而“使用线程管理的方式 进行实现”只是其中的一种实现方式) 。这篇文章中,我们主要围绕 ThreadPoolExecutor 类进行讲解。 3-1、简单使用 首先我们来看看ThreadPoolExecutor 类的最简单使用方式: package test.thread.pool; import java.util.concurrent.SynchronousQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import mons.logging.Log; import mons.logging.LogFactory; import org.apache.log4j.BasicConfigurator; public class PoolThreadSimple { BasicConfigurator.configure(); public static void main(String[] args) throws Throwable { * corePoolSize :核心大小,线程池初始化的时候,就会有这么大 * maximumPoolSize :线程池最大线程数 * keepAliveTime :如果当前线程池中线程数大于 corePoolSize 。 * 多余的线程,在等待keepAliveTime 时间后如果还没有新的线程任 务指派给它,它就会被回收 * unit :等待时间keepAliveTime 的单位 * workQueue :等待队列。这个对象的设置是本文将重点介绍的内容 ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(5, 10, 1, TimeUnit.MINUTES, new SynchronousQueueRunnable()); for(int inde

文档评论(0)

134****3224 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档