我正在使用Java,因此我需要运行一个任务直到完成或发生超时,到目前为止,我发现我应该使用ExecutorService和Future对象。然后,我可以执行任务,并且一旦达到超时,就可以发送信号以停止线程,问题是,除非我修改任务以主动检查中断信号,否则线程不会终止。
我有下面的代码可以工作,但不能像我希望的那样工作。我的真实代码有所不同,但是出于测试目的,我刚刚创建了一个打印“ hello”直到被打断的任务。
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<Void> future = executor.submit(new Callable<Void>() {
public Void call() throws Exception {
boolean test = true;
while (test && !Thread.currentThread().isInterrupted())
System.out.println("hello");
return null;
}
});
try {
future.get(2000l, TimeUnit.MILLISECONDS);
} catch (TimeoutException e) {
System.err.println("Timeout");
}
executor.shutdownNow();
executor.awaitTermination(5000l, TimeUnit.MILLISECONDS);
此方法存在两个问题:
一旦达到超时,是否有一种更快速的杀死线程的方法?
谢谢!