在探索的过程ExecutorService
中,我遇到了一种Future.get()
接受timeout
.
这种方法的Java doc说
如有必要,最多等待给定时间以完成计算,然后检索其结果(如果可用)。
参数:
timeout等待的最长时间
unit超时参数的时间单位
根据我的理解,我们对 施加超时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();
}
}
}