GAE fetchAsync - 重点是什么?

时间:2011-09-06 06:39:03

标签: java multithreading google-app-engine

Google鼓励我们使用fetchAsync而不是其他方法,因为它是异步的,所以它将使用更少的实例时间。但是,该方法返回Future<HTTPResponse>,您必须使用.get()方法来检索实际数据。 .get()方法是阻塞的,即程序的执行在返回(或抛出异常)之前不会继续。

问题是:它有什么不同?是否真的可以在不实际使用Thread的情况下保存实例时间?

1 个答案:

答案 0 :(得分:2)

不同之处在于您可以在fetchAsyncget之间执行 else

您可以执行类似(伪代码)的操作:

future = fetcher.fetchAsync (url)
while not future.isDone():
    doSomethingElse()
current = future.get()

现在,您可以通过简单地创建一个调用fetch的线程来实现线程环境中的相同目的,但这意味着管理您自己的线程以及它们之间的交互。无论如何,正如okrasz在评论中指出的那样,在GAE中不可能创建新线程(参见here)。

如果您想要的只是异步性(即使是一个词?)而不必担心所有额外的东西,您可以使用上面显示的fetchAsync/isDone/get组合。