Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在执行者提交()之后,Future是否立即为isDone()返回false_Java_Future_Executor - Fatal编程技术网

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,因为您是正确的。我指的可能是不明确的,是在调用构造函数之后不可能实现的实例。我希望我的意思很清楚。很像方便的无限长的绳子或表面的零摩擦,这是有助于在其他领域的利益。我编辑了我的措辞,希望在这个问题上更清楚。