如何找到线程完成的时间?

时间:2013-06-05 00:06:00

标签: java multithreading

我是否需要定期调用future.get以检查任务是否已执行?

ExecutorService executor = Executors.newSingleThreadExecutor();

@SuppressWarnings("unchecked")
public void start(final file avo) throws IOException
{
    Future future = executor.submit(new Callable(){

    @Override
    public Object call() throws Exception {
        Condee conv = new Condee();
        return conv.doChange(file);
    });

    LOG.debug("Finished the execution serverion");
    executor.shutdown();


}

3 个答案:

答案 0 :(得分:2)

要检查完成情况,您可以使用future.isDone(),这需要经常检查。

但是如果您使用future.get(),此方法将等待直到完成,然后返回结果。

答案 1 :(得分:1)

在executor.shutdown();

之前添加对此的调用
future.get();

此方法仅在完成后返回。

答案 2 :(得分:0)

尝试使用get方法检索值。您将获得结果或将抛出异常。当您致电未来时,以下是四种可能性:

  1. 您获得结果值
  2. 如果计算被取消,则会收到CancellationException (例如,调用Future.cancel(true))
  3. 如果计算引发了异常,则会收到ExecutionException
  4. 如果当前线程被中断,则会出现InterruptedException 等待时(例如,调用executor.shutdownNow())