仓酷云

标题: 了解下JAVA的Java ExecutorService性命周期 [打印本页]

作者: 小魔女    时间: 2015-1-18 11:01
标题: 了解下JAVA的Java ExecutorService性命周期
用java开发web只要两本书:一本是关于java基础的,一本是关于jsp、servlet的就可以了。开发周期长,我就来讲句题外话,现在有很多思想都是通过java来展现。
ExecutorService接口承继了Executor接口,界说了一些性命周期的办法
  1. publicinterface
  2. ExecutorServiceextendsExecutor{
  3. voidshutdown();
  4. List<Runnable>shutdownNow();
  5. booleanisShutdown();
  6. booleanisTerminated();
  7. booleanawaitTermination(longtimeout,TimeUnitunit)
  8. throwsInterruptedException;
  9. }
复制代码
本文,我们一一剖析内里的每一个办法。
起首,我们必要创立一个义务代码,这段义务代码次要是随机天生含有10个字符的字符串
  1. /**
  2. *随机天生10个字符的字符串
  3. *@authordream-victor
  4. *
  5. */
  6. publicclassTask1implementsCallable<String>{
  7. @Override
  8. publicStringcall()throwsException{
  9. Stringbase="abcdefghijklmnopqrstuvwxyz0123456789";
  10. Randomrandom=newRandom();
  11. StringBuffersb=newStringBuffer();
  12. for(inti=0;i<10;i++){
  13. intnumber=random.nextInt(base.length());
  14. sb.append(base.charAt(number));
  15. }
  16. returnsb.toString();
  17. }
  18. }
复制代码
然后,我们还必要一个长义务,这里我们默许是甜睡10秒
  1. /**
  2. *长工夫义务
  3. *
  4. *@authordream-victor
  5. *
  6. */
  7. publicclassLongTaskimplementsCallable<String>{
  8. @Override
  9. publicStringcall()throwsException{
  10. TimeUnit.SECONDS.sleep(10);
  11. return"success";
  12. }
  13. }
复制代码
OK,一切后期筹办终了,上面我们就来剖析一下ExecutorService接口中和性命周期有关的这些方法:
1、shutdown办法:这个办法会光滑地封闭ExecutorService,当我们挪用这个办法时,ExecutorService中断承受任何新的义务且守候已提交的义务实行完成(已提交的义务会分两类:一类是已经在实行的,另外一类是还没有入手下手实行的),当一切已提交的义务实行终了后将会封闭ExecutorService。这里我们先不举例鄙人面举例。
2、awaitTermination办法:这个办法有两个参数,一个是timeout即超不时间,另外一个是unit立即间单元。这个办法会使线程守候timeout时长,当凌驾timeout工夫后,会监测ExecutorService是不是已封闭,若封闭则前往true,不然前往false。一样平常情形下会和shutdown办法组合利用。比方:
  1. ExecutorServiceservice=Executors.newFixedThreadPool(4);
  2. service.submit(newTask1());
  3. service.submit(newTask1());
  4. service.submit(newLongTask());
  5. service.submit(newTask1());
  6. service.shutdown();
  7. while(!service.awaitTermination(1,TimeUnit.SECONDS)){
  8. System.out.println("线程池没有封闭");
  9. }
  10. System.out.println("线程池已封闭");
复制代码
这段代码中,我们在第三次提交了一个长义务,这个义务将实行10秒甜睡,紧随着实行了一次shutdown()办法,假定:这时候ExecutorService被当即封闭,上面挪用service.awaitTermination(1,TimeUnit.SECONDS)办法时应当前往true,程序实行了局应当只会打印出:“线程池已封闭”。可是,实在的运转了局以下:
  1. 线程池没有封闭
  2. 线程池没有封闭
  3. 线程池没有封闭
  4. 线程池没有封闭
  5. 线程池没有封闭
  6. 线程池没有封闭
  7. 线程池没有封闭
  8. 线程池没有封闭
  9. 线程池没有封闭
  10. 线程池已封闭
复制代码
这申明我们假定毛病,service.awaitTermination(1,TimeUnit.SECONDS)每隔一秒监测一次ExecutorService的封闭情形,而长义务恰好必要实行10秒,因而会在前9秒监测时ExecutorService为未封闭形态,而在第10秒时已封闭,因而第10秒时输入:线程池已封闭。这也考证了shutdown办法封闭ExecutorService的前提。
<p>
首先第一点:jsp,servlet,javabean这些最基本的,嘿嘿,就算你是高手的话,在大行的企业级应用的话还是需要框架的,一个好的框架确实能构解决许多问题。
作者: 深爱那片海    时间: 2015-1-20 12:52
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
作者: 第二个灵魂    时间: 2015-1-26 16:59
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
作者: 老尸    时间: 2015-1-27 14:02
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
作者: 飘灵儿    时间: 2015-2-3 23:00
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
作者: 爱飞    时间: 2015-2-9 05:45
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
作者: 愤怒的大鸟    时间: 2015-2-27 02:06
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
作者: admin    时间: 2015-3-8 19:02
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
作者: 若相依    时间: 2015-3-16 11:55
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
作者: 再见西城    时间: 2015-3-22 22:51
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2