无法找到有关executor.submit()
来电的未来状态的文档。
示例:
byte[] b = new byte[ 4000000 ];
new Random().nextBytes( b );
Callable<byte[]> c = new SorterCallable( b );
ExecutorService executor = Executors.newCachedThreadPool();
Future<byte[]> result = executor.submit( c );
boolean futureState = result.isDone();
问题是,在提交后立即调用Future<byte[]>
时返回的isDone()
对象是否返回false?
或者futureState
true
是否也可能boolean futureState = result.isDone();
之前已执行提交的任务?
答案 0 :(得分:4)
我想知道提交的行为是否为isDone()
构造了预定义为false的Future
只需查看答案来源。
在FutureTask
构造函数中,私有
字段state
设置为NEW
。 isDone()
方法返回state != NEW
。因此,在创建对象的那一刻,isDone()
在理论上是错误的。
public FutureTask(Runnable runnable, V result) {
this.callable = Executors.callable(runnable, result);
this.state = NEW; // ensure visibility of callable
}
public boolean isDone() {
return state != NEW;
}
当然,如Alexey's answer中所述,如果任务在您提交的时间与您检查的时间之间执行,则您的futureState
变量可能为真。
答案 1 :(得分:3)
回答问题
或者,futureState是否也可能是真的,以便在布尔futureState = result.isDone()之前执行提交的任务; ?
技术上是的,有可能。线程调度可能会使任务立即完成。但是,在大多数情况下,您将获得false
IMO。