我在探索ExecutorService
时,遇到方法Future.get()
,它接受timeout
。执行程序服务 - 线程超时
这种方法的Java的医生说
如有必要,等待至多给定的时间计算完成,然后获取其结果(如果可用)。
参数:
超时的最长等待时间
单元超时参数
按我理解的时间单位,我们正在实行超时callable
,我们提交到ExecutorService
这样,我的callable
将中断已超过指定时间(超时)
但根据以下代码,longMethod()
似乎超出超时(2秒),我真的很困惑理解这一点。任何人都可以请我指出正确的道路?
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class Timeout implements Callable<String> {
public void longMethod() {
for(int i=0; i< Integer.MAX_VALUE; i++) {
System.out.println("a");
}
}
@Override
public String call() throws Exception {
longMethod();
return "done";
}
/**
* @param args
*/
public static void main(String[] args) {
ExecutorService service = Executors.newSingleThreadExecutor();
try {
service.submit(new Timeout()).get(2, TimeUnit.SECONDS);
} catch (Exception e) {
e.printStackTrace();
}
}
}
除了答案之外,请注意即使任务被中断,因为它永远不会检查中断标志,它会继续运行直到结束。 – 2013-04-29 11:17:59