我想在固定的时间后中断一个线程。其他人问了同样的问题,投票最多的答案(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<String> {
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/演示目的。只需在此处代替 sleep() 执行您的长时间运行的任务。
但是如果你替换Thread.sleep(4000);
为for (int i = 0; i < 5E8; i++) {}
then 它不会编译,因为空循环不会抛出 InterruptedException。为了使线程可中断,它需要抛出一个 InterruptedException。
有什么方法可以使上述代码与一般的长时间运行的任务一起工作,而不是sleep()
?