
parallelFuture::cancel() 메소드는 특정 스레드의 실행을 취소할 수 있습니다. 그러나, 이 메소드는 스레드가 이미 완료된 경우 취소할 수 없습니다.
cancel() 메소드를 사용하여 취소한 스레드는 다시 실행되지 않습니다. 대신, 스레드가 이미 완료된 경우 cancel() 메소드는 즉시 반환됩니다.
다음은 cancel() 메소드의 동작에 대한 예시 코드입니다.
#hostingforum.kr
java
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
public class Main {
public static void main(String[] args) throws InterruptedException, ExecutionException {
// 스레드 생성
Callable callable = () -> {
System.out.println("스레드가 실행 중입니다.");
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
return "스레드가 완료되었습니다.";
};
// Future 객체 생성
Future future = java.util.concurrent.ExecutorService.newSingleThreadExecutor().submit(callable);
// 2초 후에 취소
TimeUnit.SECONDS.sleep(2);
future.cancel(true); // true는 interrupt를 사용하여 취소
try {
// 취소된 스레드의 결과를 가져옵니다.
System.out.println(future.get());
} catch (CancellationException e) {
System.out.println("스레드가 취소되었습니다.");
} catch (InterruptedException | ExecutionException e) {
Thread.currentThread().interrupt();
}
}
}
이 예시 코드에서, 스레드가 2초 후에 취소됩니다. 취소된 스레드의 결과를 가져오려고 할 때 CancellationException이 발생합니다.
2025-08-16 05:00