を探索しているときに、を受け入れるExecutorService
メソッドに遭遇しました。Future.get()
timeout
このメソッドのJavaドキュメントは言う
必要に応じて、計算が完了するまで指定された時間だけ待機し、可能な場合はその結果を取得します。
パラメーター:
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();
}
}
}