广州疯狂软件学院拥有三大课程体系包括:java课程,android课程,ios课程,本月基础强化营(可先就业后付款)火热报名中,欢迎有志之士电话020-28309358或者QQ544627560咨询。
这里使用JDK5+的java.util.concurrent包下的API实现,采用这种方式是相对比较安全的。
实现效果:
启动一个任务,然后等待任务的计算结果同时设定一个超时时间,如果等待时间超出预设定的超时时间,则中止任务。
代码实现:
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
/**
* 启动一个任务,然后等待任务的计算结果,如果等待时间超出预设定的超时时间,则中止任务。
*
* @author Chen Feng
*/
public class TaskTimeoutDemo {
public static void main(String[] args) {
System.out.println("Start ...");
ExecutorService exec = Executors.newCachedThreadPool();
testTask(exec, 15); // 任务成功结束后等待计算结果,不需要等到15秒
testTask(exec, 5); // 只等待5秒,任务还没结束,所以将任务中止
exec.shutdown();
System.out.println("End!");
}
public static void testTask(ExecutorService exec, int timeout) {
MyTask task = new MyTask();
Future future = exec.submit(task);
Boolean taskResult = null;
String failReason = null;
try {
// 等待计算结果,最长等待timeout秒,timeout秒后中止任务
taskResult = future.get(timeout, TimeUnit.SECONDS);
} catch (InterruptedException e) {
failReason = "主线程在等待计算结果时被中断!";
} catch (ExecutionException e) {
failReason = "主线程等待计算结果,但计算抛出异常!";
} catch (TimeoutException e) {
failReason = "主线程等待计算结果超时,因此中断任务线程!";
exec.shutdownNow();
}
System.out.println("\ntaskResult : " + taskResult);
System.out.println("failReason : " + failReason);
}
}
class MyTask implements Callable {
@Override
public Boolean call() throws Exception {
// 总计耗时约10秒
for (int i = 0; i < 100L; i++) {
Thread.sleep(100); // 睡眠0.1秒
System.out.print('-');
}
return Boolean.TRUE;
}
}
运行结果:
Start ...
-------------------------------------------------------------------------------------------------
---
taskResult : true
failReason : null
---------------------------------------------
taskResult : null
failReason : 主线程等待计算结果超时,因此中断任务线程!
End!
疯狂Java培训专注软件开发培训,提升学员就业能力,重点提升实践动手能力。疯狂软件开设了java课程,ios课程,android课程,为你提供一个学习java技能的好机会,疯狂软件特大优惠活动,加疯狂软件微信号(疯狂软件),抢优惠,优惠100元+赠送iOS教材一本 详情请看疯狂java培训官网。IT从业着仍是社会所需要的高端人才,广州疯狂软件之力于培养企业所需要的中高端IT人才,让你成为备受企业青睐的人才。
疯狂Java培训专注软件开发培训,提升学员就业能力,重点提升实践动手能力。技术知识沉淀深厚的老师,让你感受Java的魅力,激发你对于编程的热爱,让你在半年的时间内掌握8-10万的代码量,掌握Java核心技术,成为真正的技术高手;通过大量全真企业项目疯狂训练,迅速积累项目经验。让你成为技能型的现代化高端人才,迅速获得高薪就业!时间不等人,赶紧联系我们吧!疯狂java培训中心地址:广州天河区车陂沣宏大厦3楼。