我有使用ExecutorService来安排任务的方法。我需要在一段时间后终止任务。我该如何指定这样的时间?
public String schedule(Callable<Object> task)
{
Future<Object> f = null;
String status = null;
try
{
f = service.submit(task);
status = f.get(1, TimeUnit.SECONDS).toString();
}
catch (TimeoutException e)
{
status = "Waiting took too long.";
}
catch (Exception e)
{
status = e.getMessage();
}
return f.toString();
}
编辑: 我有一个进程应该在等待资源可用的x时间后终止,而不是无限期地等待。
答案 0 :(得分:0)
此停止执行行为应该由任务本身实现。您可以尝试强制停止线程,但这会导致死锁问题。
你应该让任务实现超时逻辑,这样他们就可以以适当的方式关闭自己。
以下是等待资源的任务的基本示例:
@Override
public Object call() throws Exception { // In a Callable<Object>
long startTime = System.currentTimeMillis();
while(System.currentTimeMillis() - startTime < 5000) { // wait for max 5 seconds.
if(resource.isAvailable()) {
// Do something with the resource
return someValue;
}
}
throw new TimeoutException("Resource could not be acquired");
}