求助各位:线程运行时间过长吗,如何终止运行?
如下代码:
public class gggg {
public class MRCC implements Callable<Integer>{
public Integer call() throws Exception {
int i = 0;
i = getI();
return i;
}
}
public static int getI(){
while(true){
//模拟一个调用可能需要很长时间才会返回,或者不返回结果的接口(只是模拟,并且这个调用接口不可以更改)
}
}
public static void main(String[] args) {
gggg g = new gggg();
ExecutorService e = Executors.newSingleThreadExecutor();
Future<Integer> f = e.submit(g.new MRCC());
try {
f.get(4000, TimeUnit.MILLISECONDS);
System.out.println("获得了返回值");
} catch (InterruptedException e1) {
System.out.println("中断错误");
} catch (ExecutionException e1) {
System.out.println("执行错误");
} catch (TimeoutException e1) {
f.cancel(true);
System.out.println("超时");
}
System.out.println(f.isCancelled() + "," + f.isDone());
System.out.println("关闭");
e.shutdown();
}
}
一楼的方法试了吗?超时之后主动调用运行线程的interrupt方法,Future的
get
V get(long timeout,
TimeUnit unit)
throws InterruptedException,
ExecutionException,
TimeoutException
方法在接收到interrupt指令后是能抛出InterruptedException的(我觉得get应该是预先设置了如何处理中断信号的逻辑的,否则就无法抛出InterruptedException),只不过还不清楚超时后该线程处于什么工作状态,能不能两次抛出异常