아직 완료되지 않은 작업을 취소하는 기능을 갖고 있습니다
cancel(true): Future를 취소상태로 변경하고 작업이 실행중이라면,
Thread.interrupt()를 호출해서 작업을 중단합니다
cancel(false): Future를 취소상태로 변경하며, 이미 실행중인 작업을 중단하지는 않습니다
반환값: 작업이 성공적으로 취소되면 true를 반환하며 이미 완료되었거나 취소할 수 없는 경우 false를 반환합니다
참고로 취소 상태의 Future에 Future.get()을 호출하면 CancellationException 런타임 예외가 발생합니다
작업이 취소되었는지 여부를 확인하며, 작업이 취소된 경우 true를 반환하고 아니라면 false를 반환합니다
이때, 작업이 cancel() 메소드에 의해 취소된 경우에 true를 반환합니다
작업이 완료되었는지 여부를 확인합니다
작업이 정상적으로 완료되었거나 취소되거나 예외가 발생해서 종료된 경우 true를 반환합니다
그렇지 않다면 false를 반환합니다
Future의 상태를 반환합니다 자바 19부터 지원하는 기능입니다
작업이 완료될 때까지 대기하고 완료되면 결과를 반환합니다
작업의 결과를 반환합니다
IntterruptedException은 대기 중에 현재 스레드가 인터럽트된 경우 발생하며,
ExecutionException은 작업 계산 중에 예외가 발생한 경우 발생합니다
작업이 완료될 때까지 get()을 호출한 현재 스레드를 대기합니다
작업이 완료되면 결과를 반환합니다
get()과 같은데 시간이 초과되면 예외를 발생합니다
timeout은 대기할 최대시간이며 unit은 timeout 매개변수의 시간 단위를 지정하는 것입니다
앞선 V get()의 예외와 더불어 추가로 TimeoutException 예외가 발생하는데
이것은 주어진 시간 내에 작업이 완료되지 않은 경우 발생합니다
boolean cancelRes = future.cancel(true);
try{
Integer res = future.get();
}catch(CancellationException e){
.....
}catch(InterruptedException | ExecutionException e){
.....
}
true를 넘겨주면 실행중인 작업에 인터럽트가 발생해서 실행중인 작업을 중지시도합니다
이후, Future.get()을 호출하면 CancellationException 런타임 예외가 발생합니다
Future.get()을 호출하면 작업의 결과값 뿐만 아니라, 작업 중에 발생한 예외도 받을 수 있습니다
Future의 상태가 FAILED면 내부에서 발생한 예외를 ExecutionException 예외를 던져,
원본 예외를 e.getCause()를 호출해서 받을 수 있습니다