java 实现timeout 的问题

lovingpig520 2015-09-18 04:09:55
代码里有一个调用其他模块的方法, 但是那个方法有时候会需要很长时间, 想实现一个timeout

创建了如下代码:
package com.timeout;

import java.util.Date;
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class TimeOutExample {
public static void print(){
int i = 0;
while(i == 0){

}

}
public static void main(String[] args) throws Exception {

Callable reservationTask = new Callable() {
public Object call() throws InterruptedException {
String s = "";

//put JCO call here
print();

return "task has runned";
}
};

final FutureTask future = new FutureTask(reservationTask);
Thread th = new Thread() {
public void run() {
future.run();
}

};

System.out.println("Start");
long start = new Date().getTime();
th.start();

try {


String result = (String)future.get(2, TimeUnit.SECONDS);
System.out.println(result);
System.out.println("end");
} catch (TimeoutException e) {
System.out.println("time out");
future.cancel(true);

e.printStackTrace();
} finally {
long end = new Date().getTime();
System.out.println("total run time" + (end - start) + "millisecond");
}
}
}

代码中 虽然throw了 timeoutexception, 但是并没用结束print方法的执行。 问下这种情况print方法调用结束了么
...全文
392 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
疯狂熊猫人 2015-09-19
  • 打赏
  • 举报
回复
future.getTimeout(long time,TimeUnit unit);
lovingpig520 2015-09-18
  • 打赏
  • 举报
回复
有高手帮忙解答下么
lovingpig520 2015-09-18
  • 打赏
  • 举报
回复
问题补充 如果print是一个数据库的调用, 在线程timeout的时候和数据库的连接 能中止么?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧