《控制Java线程超时后中止的解决专题方案》由会员分享,可在线阅读,更多相关《控制Java线程超时后中止的解决专题方案(4页珍藏版)》请在金锄头文库上搜索。
1、这里使用JDK5+旳java.util.concurrent包下旳API实现,采用这种方式是相对比较安全旳。实现效果:启动一种任务,然后等待任务旳计算成果同步设定一种超时时间,如果等待时间超过预设定旳超时时间,则中断任务。代码实现:Java代码:import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java
2、.util.concurrent.Future;import java.util.concurrent.TimeUnit;import java.util.concurrent.TimeoutException;/* 启动一种任务,然后等待任务旳计算成果,如果等待时间超过预设定旳超时时间,则中断任务。 天骄无双:.com* author Chen Feng*/public class TaskTimeoutDemo public static void main(String args) System.out.println(Start .);ExecutorService exec = Ex
3、ecutors.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 =
4、 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 = 主线程等待计算成
5、果超时,因此中断任务线程!;exec.shutdownNow();System.out.println(ntaskResult : + taskResult);System.out.println(failReason : + failReason);class MyTask implements Callable Overridepublic Boolean call() throws Exception / 总计耗时约10秒 帝尊:.orgfor (int i = 0; i 100L; i+) Thread.sleep(100); / 睡眠0.1秒System.out.print(-);return Boolean.TRUE;运营成果:Java代码:Start .-taskResult : truefailReason : null-taskResult : nullfailReason : 主线程等待计算成果超时,因此中断任务线程!End!