- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Jav线程池编程
线程池编程 java.util.concurrent 多线程框架---线程池编程(一) 一般的服务器都需要线程池,比如Web、FTP等服务器,不过它们一般都自己实现了线程池,比如以前介绍过的Tomcat、Resin和Jetty等,现在有了JDK5,我们就没有必要重复造车轮了,直接使用就可以,何况使用也很方便,性能也非常高。 ?1?package?concurrent;?2?import?java.util.concurrent.ExecutorService;??3?import?java.util.concurrent.Executors;??4?public?class?TestThreadPool??5?{??6?????public?static?void?main(String?args[])?throws?InterruptedException?牋牋爗??牋牋牋牋?/爋nly爐wo爐hreads??牋牋牋牋燛xecutorService爀xec?燛xecutors.newFixedThreadPool(2);?10牋牋牋牋? for(int爄ndex??;爄ndex??00;爄ndex++)11牋牋牋牋爗?12牋牋牋牋牋牋燫unnable爎un?爊ew燫unnable()13牋牋牋牋牋牋爗?14牋牋牋牋牋牋牋牋爌ublic爒oid爎un()?15牋牋牋牋牋牋牋牋爗?16牋牋牋牋牋牋牋牋牋牋爈ong爐ime??long)?Math.random()??000);?17牋牋牋牋? 牋牋牋牋牋牋System.out.println(Sleeping??爐ime??ms);18牋牋牋牋牋牋牋牋牋牋爐ry19牋牋牋牋牋牋牋牋牋牋爗20牋牋牋牋牋牋牋牋牋牋牋牋燭hread.sleep(time);?21牋牋牋牋牋牋牋牋牋牋牋牋?22牋牋牋牋牋牋牋牋牋牋爙?23牋牋牋牋牋牋牋牋牋牋燾atch?InterruptedEx ception爀)?24牋牋牋牋牋牋牋牋牋牋爗?25牋牋牋牋牋牋牋牋牋牋牋牋?26牋牋牋牋牋牋牋牋牋牋爙?27牋牋牋牋牋牋牋牋牋牋?28牋牋牋牋牋牋牋牋爙29牋牋牋牋牋牋牋牋?30牋牋牋牋牋牋爙;31牋牋牋牋牋牋牋牋牋牋?32牋牋牋牋牋牋爀xec.execute(run);?33牋牋牋牋牋牋牋牋牋牋 ?34牋牋牋牋爙?/爉ust爏hutdown35牋牋牋牋牋牋牋牋牋牋?36牋牋牋牋爀xec.shutdown();?37牋牋牋牋?38牋牋爙?39牋牋?/}40牋牋? }41?//}42? ? 上面是一个简单的例子,使用了2个大小的线程池来处理100个线程。但有一个问题:在for循环的过程中,会等待线程池有空闲的线程,所以主线程会阻塞的。为了解决这个问题,一般启动一个线程来做for循环,就是为了避免由于线程池满了造成主线程阻塞。不过在这里我没有这样处理。[重要修正:经过测试,即使线程池大小小于实际线程数大小,线程池也不会阻塞的,这与Tomcat的线程池不同,它将Runnable实例放到一个“无限”的BlockingQueue中,所以就不用一个线程启动for循环,Doug Lea果然厉害] 另外它使用了Executors的静态函数生成一个固定的线程池,顾名思义,线程池的线程是不会释放的,即使它是Idle。这就会产生性能问题,比如如果线程池的大小为200,当全部使用完毕后,所有的线程会继续留在池中,相应的内存和线程切换(while(true)+sleep循环)都会增加。如果要避免这个问题,就必须直接使用ThreadPoolExecutor()来构造。可以像Tomcat的线程池一样设置“最大线程数”、“最小线程数”和“空闲线程keepAlive的时间”。通过这些可以基本上替换Tomcat的线程池实现方案。 需要注意的是线程池必须使用shutdown来显式关闭,否则主线程就无法退出。shutdown也不会阻塞主线程。 许多长时间运行的应用有时候
文档评论(0)