什么时候任务完成了

时间:2014-12-11 15:58:33

标签: java concurrency future

当一个Future任务在命中return语句时被认为是完成了isDone()==true吗? 例如:

ExecutorService executor = newSingleThreadExecutor();
Future<> result = executor.submit(new Runnable()
            {
                @Override
                public void run()
                {
                   return;
                }
            }

结果是在return

命中时完成的

2 个答案:

答案 0 :(得分:3)

或多或少。 javadoc对于它的确切含义是不明确的,但通常,当callable返回时,isDone()之后很快就会为真(或者如果发生异常,则同样如此)。

答案 1 :(得分:2)

Future.get的完成被视为确定了Future的完成情况。

引用java docs

Future表示异步计算的结果。提供方法以检查计算是否完成,等待其完成,以及检索计算结果。 结果只能在计算完成时使用方法get检索,必要时阻塞直到准备好。取消由cancel方法执行。提供了其他方法来确定任务是否......

换句话说,直到时间Future没有完成,才会阻止对Future.get的调用,因此Future.get的完成应被视为Future的完成}(正常或异常

P.S。: Future.isDone只应用于检查状态,而不是Future完成时的指示。