如何使用Java中的ExecutorService为任务设置超时时间

时间:2016-07-08 23:44:46

标签: java executorservice timing java.util.concurrent threadpoolexecutor

我有使用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时间后终止,而不是无限期地等待。

1 个答案:

答案 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");
}