Я хочу прервать поток после фиксированного количество времени. Кто-то еще задал тот же вопрос, и ответ с наибольшим количеством голосов ( 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()
?