java - GAE fetchAsync - 有什么意义?

标签 java multithreading google-app-engine

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

问题是:这有什么区别?是否真的可以在不实际使用 Thread 的情况下节省实例时间?是吗?

最佳答案

不同之处在于,您可以在 fetchAsyncget 之间执行其他操作。

你可以做类似的事情(伪代码):

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

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

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

关于java - GAE fetchAsync - 有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7315815/

相关文章:

java - 如何通过java为给定域生成站点地图有哪些可用的API或源代码

java - 套接字编程 - BindException - 地址已被使用

java - Google App Engine 中的非规范化?

java - 可空元素的二维非空数组

java - 在服务器上关闭 AtomicBoolean ching 太晚了(Java)

java - 返回 Android 中的上一个 Activity

c# - 使用 Entity Framework 等待数据更改时,是否有比 Thread.Sleep 更好的替代方法?

python - Tkinter 应用程序中可能存在锁定问题

google-app-engine - GAE - Python 3.7 - 如何记录?

google-app-engine - 用于参数化、不可用类型的 ApiTransformer