使用的目的:
在一项耗时任务上,不可能无限期的等待下去。无论是从程序健壮性,还是从代码优雅上来看,把不可控变为可控是靠谱的。
ExecutorService有两个方法submit和execute,两个都可以用来执行任务,不同的是submit可以执行Callable和Runable,而execute只能执行Runable
区别是submit可以返回一个Future对象,该对象可以通过get()获取任务执行的结果,Callable可以返回结果而Runable返回的为空。
一个简单实例
ExecutorService executorService = Executors.newCachedThreadPool();
Future future = executorService.submit(new Callable<Integer>() {
public Integer call() {
int i = 10;
while (i > 0) {
i--;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("sleep...");
}
return 1;
}
});
try {
Object o = future.get(5, TimeUnit.SECONDS);
System.out.println("在指定时间内完成,结果为:"+o);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (TimeoutException e) {
System.out.println("任务执行时间超时");
}
executorService.shutdown();
尊重作者,转载请注明出处!
版权申明:本文版权归作者所有,未经授权,任何单位或个人不得以任何形式转载、摘编或利用其它方式使用本博客内容。作者保留追究相关法律责任的权利。如需使用博客内容,请与作者联系获得授权。感谢对本文的尊重与支持。
免责声明:本网站所载内容仅供参考,不构成任何专业建议。用户基于本网站内容作出的决策,风险自担。对于因使用本网站内容而产生的任何直接或间接损失,本网站不承担任何责任。请用户审慎判断,理性使用。