Java 在执行者提交()之后,Future是否立即为isDone()返回false
找不到有关Java 在执行者提交()之后,Future是否立即为isDone()返回false,java,future,executor,Java,Future,Executor,找不到有关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.s
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();
byte[]b=新字节[4000000];
新的Random().nextBytes(b);
可调用c=新分拣机可调用(b);
ExecutorService executor=Executors.newCachedThreadPool();
未来结果=执行人提交(c);
布尔futureState=result.isDone();
问题是,在提交后立即调用isDone()
时,返回的Future
对象是否返回false
或者也可能是futureState
为true
,因此提交的任务在boolean futureState=result.isDone()之前执行代码>?回答问题
或者futureState是否也可能为true,以便提交的任务在布尔futureState=result.isDone()之前执行
技术上是的,这是可能的。线程调度的方式可能会使任务立即完成。但是,在大多数情况下,您将得到false
IMO
我想知道提交的行为是否构建了一个具有预定义false for isDone()的未来
只要查一下答案的来源就可以了
在FutureTask
构造函数中,私有
字段状态
设置为新建
。isDone()
方法返回状态!=新建
。因此,在创建对象的那一刻,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;
}
当然,如中所述,如果任务在您提交任务和检查任务之间执行,则您的futureState
变量可能为true 我认为,这完全取决于任务需要多长时间以及线程的调度方式。您是否在问,在提交任务和检查isDone()
之间的短时间内,任务是否可以执行?或者提交任务的行为是否会导致isDone()
变为true
?执行者用isDone()的默认假值构建未来难道没有意义吗?@Readwald:我想知道提交任务的行为是否会用isDone()的预定义假值构建未来。感谢分享信息,我不知道:)谢谢,这就是我要找的。“因此,在创建对象的那一刻,isDone()返回false。”-呃,我认为这不对isDone()
在其构造函数创建了FutureTask
之后才能调用。如果说isDone()
在可以调用它的时间点之后才返回任何内容,这是没有意义的。在施工结束和该时间点之间,计划任务理论上可以运行。事实上,在当前线程的时间线中没有一点可以保证真正的isDone()
调用不会返回true
@StephenC,因为您是正确的。我指的可能是不明确的,是在调用构造函数之后不可能实现的实例。我希望我的意思很清楚。很像方便的无限长的绳子或表面的零摩擦,这是有助于在其他领域的利益。我编辑了我的措辞,希望在这个问题上更清楚。