прерывание потока по истечении фиксированного времени, должен ли он вызывать InterruptedException?

Я хочу прервать поток после фиксированного количество времени. Кто-то еще задал тот же вопрос, и ответ с наибольшим количеством голосов ( https://stackoverflow.com/a/2275596/1310503) дал приведенное ниже решение, которое я немного сократил.

import java.util.Arrays;
import java.util.concurrent.*;

public class Test {
    public static void main(String[] args) throws Exception {
        ExecutorService executor = Executors.newSingleThreadExecutor();
        executor.invokeAll(Arrays.asList(new Task()), 2, TimeUnit.SECONDS);
        executor.shutdown();
    }
}

class Task implements Callable {
    public String call() throws Exception {
        try {
            System.out.println("Started..");
            Thread.sleep(4000); // Just to demo a long running task of 4 seconds.
            System.out.println("Finished!");
        } catch (InterruptedException e) {
            System.out.println("Terminated!");
        }
        return null;
    }
}

Они добавили:

sleep() не требуется. Он просто используется для целей SSCCE/демонстрации. Просто выполняйте свою длительную задачу прямо здесь, вместо сна().

Но если вы замените Thread.sleep(4000);на for (int i = 0; i , то он не скомпилируется, потому что пустой цикл не генерирует InterruptedException. И чтобы поток был прерываемым, он должен генерировать InterruptedException.

Есть ли способ заставить приведенный выше код работать с общей длительной задачей вместо sleep()?

5
задан Community 23 May 2017 в 11:44
поделиться