J2SE5.0中的线程缓冲 ---- 线程池 - 编程入门网
ThreadFactory threadFactory,
RejectedExecutionHandler handler);
}
J2SE5.0中的线程缓冲 ---- 线程池(2)时间:2011-05-20五、两个重要概念Sizes与Queues Size 一个线程库创建后,其的大小在最小值(corePoolSize)与最大值(maximumPoolSize)之间,运行时可根据getPoolSize()确定其当前的大小。 Queue 队列用于存放等候执行的任务。 下面一步步分析这两个值在线程库的工作中是如何运作:
行1-2构造了一个线程库,M个core threads和N maximum threads,这时实际上并没有线程被创建。(可能过prestartAllCoreThreads() 和 prestartCoreThread() 方法分别预先创建) 第7行 一个任务被加入到线程库,这时下列5种情况之一将会发生: 如果库中的线程数少于M,线程库将立即启动一个新的线程来运行这个任务。即使库中有空闲的线程,仍然会产生一个新线程直到数量到达M。 如果库中的线程数在M和N之间,并且只少有一个是空闲线程,那么任务将由这个空闲线程执行。 如果库中的线程数在M和N之间,并且没有空闲线程,这时库会检查存在的工作队列,如果任务能够放置在队列中而不被阻塞,那么任务就会放置在该列队中,不会有新的线程启动。 如果库中的线程数在M和N之间,并且没有空闲线程,且任务不能无阻塞地加入到队列中,这时库会开始一个新线程来运行这个任务。 如果库中的线程数量已到达N且没有空闲线程,这时库将会试着放置新任务到一个队列。如果该队列已到达它的最大大小,任务将会被拒绝,添加失败,否则任务将被接受等待有空闲的线程来运行它。 一个任务执行完成,运行这个任务的线程将去运行队列中的下一个任务,如果队列中没有任务,将会发生下面两种情况之一: 如果库中的线程数大于M,线程将等待一个队列中有新的任务。如果队列中的新任务没有超时,该线程将运行这个任务,否则线程将退出以减少库中的线程数量。超时值是在新构造线程库时指定的TIMEOUT,如果TIMEOUT为0,不管库的最小大小(corePoolSize)是多少,线程执行完任务后总是退出。 如果库中的线程数量等于M或小于M,该线程将不确定地被阻塞以等待一个新的任务被加入到队列(除非TIMEOUT=0,它将退出),当它有效时就会运行这个新任务。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |