Как я могу получить FutureTask для возврата после TimeoutException?

В приведенном ниже коде я ловлю исключение TimeoutException через 100 секунд, как и предполагалось. В этот момент я ожидаю, что код выйдет из основного и программа завершится, но он продолжит печатать на консоль. Как получить задание прекратить выполнение после тайм-аута?

private static final ExecutorService THREAD_POOL = Executors.newCachedThreadPool();

private static <T> T timedCall(Callable<T> c, long timeout, TimeUnit timeUnit) throws InterruptedException, ExecutionException, TimeoutException {
    FutureTask<T> task = new FutureTask<T>(c);
    THREAD_POOL.execute(task);
    return task.get(timeout, timeUnit);
}


public static void main(String[] args) {

    try {
        int returnCode = timedCall(new Callable<Integer>() {
            public Integer call() throws Exception {
                for (int i=0; i < 1000000; i++) {
                    System.out.println(new java.util.Date());
                    Thread.sleep(1000);
                }
                return 0;
            }
        }, 100, TimeUnit.SECONDS);
    } catch (Exception e) {
        e.printStackTrace();
        return;
    }


}

Ответы на вопрос(3)

Ваш ответ на вопрос