仓酷云
标题:
了解下JAVA的Java ExecutorService性命周期
[打印本页]
作者:
小魔女
时间:
2015-1-18 11:01
标题:
了解下JAVA的Java ExecutorService性命周期
用java开发web只要两本书:一本是关于java基础的,一本是关于jsp、servlet的就可以了。开发周期长,我就来讲句题外话,现在有很多思想都是通过java来展现。
ExecutorService接口承继了Executor接口,界说了一些性命周期的办法
publicinterface
ExecutorServiceextendsExecutor{
voidshutdown();
List<Runnable>shutdownNow();
booleanisShutdown();
booleanisTerminated();
booleanawaitTermination(longtimeout,TimeUnitunit)
throwsInterruptedException;
}
复制代码
本文,我们一一剖析内里的每一个办法。
起首,我们必要创立一个义务代码,这段义务代码次要是随机天生含有10个字符的字符串
/**
*随机天生10个字符的字符串
*@authordream-victor
*
*/
publicclassTask1implementsCallable<String>{
@Override
publicStringcall()throwsException{
Stringbase="abcdefghijklmnopqrstuvwxyz0123456789";
Randomrandom=newRandom();
StringBuffersb=newStringBuffer();
for(inti=0;i<10;i++){
intnumber=random.nextInt(base.length());
sb.append(base.charAt(number));
}
returnsb.toString();
}
}
复制代码
然后,我们还必要一个长义务,这里我们默许是甜睡10秒
/**
*长工夫义务
*
*@authordream-victor
*
*/
publicclassLongTaskimplementsCallable<String>{
@Override
publicStringcall()throwsException{
TimeUnit.SECONDS.sleep(10);
return"success";
}
}
复制代码
OK,一切后期筹办终了,上面我们就来剖析一下ExecutorService接口中和性命周期有关的这些方法:
1、shutdown办法:这个办法会光滑地封闭ExecutorService,当我们挪用这个办法时,ExecutorService中断承受任何新的义务且守候已提交的义务实行完成(已提交的义务会分两类:一类是已经在实行的,另外一类是还没有入手下手实行的),当一切已提交的义务实行终了后将会封闭ExecutorService。这里我们先不举例鄙人面举例。
2、awaitTermination办法:这个办法有两个参数,一个是timeout即超不时间,另外一个是unit立即间单元。这个办法会使线程守候timeout时长,当凌驾timeout工夫后,会监测ExecutorService是不是已封闭,若封闭则前往true,不然前往false。一样平常情形下会和shutdown办法组合利用。比方:
ExecutorServiceservice=Executors.newFixedThreadPool(4);
service.submit(newTask1());
service.submit(newTask1());
service.submit(newLongTask());
service.submit(newTask1());
service.shutdown();
while(!service.awaitTermination(1,TimeUnit.SECONDS)){
System.out.println("线程池没有封闭");
}
System.out.println("线程池已封闭");
复制代码
这段代码中,我们在第三次提交了一个长义务,这个义务将实行10秒甜睡,紧随着实行了一次shutdown()办法,假定:这时候ExecutorService被当即封闭,上面挪用service.awaitTermination(1,TimeUnit.SECONDS)办法时应当前往true,程序实行了局应当只会打印出:“线程池已封闭”。可是,实在的运转了局以下:
线程池没有封闭
线程池没有封闭
线程池没有封闭
线程池没有封闭
线程池没有封闭
线程池没有封闭
线程池没有封闭
线程池没有封闭
线程池没有封闭
线程池已封闭
复制代码
这申明我们假定毛病,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