gpt4 book ai didi

java - 如何实现异步计算?

转载 作者:太空宇宙 更新时间:2023-11-04 07:00:14 25 4
gpt4 key购买 nike

我一直在考虑用不同的方法来实现Java中的异步处理。我想到了几种可能性,想听听您对其中一些是否比其他更好的意见,并可能获得有关如何做到这一点的进一步建议。最常见的用例是使用以下 API 通过连接(例如 TCP)发送数据包 void sendData(Data data)甚至 void sendData(Data data, Handler handler) 。以下是我的一些想法:

  1. 专用数据发送循环 - 有一个专用线程,其行为有点像 Java 中的事件调度线程,所有其他线程都调用并提交请求。这些请求存储在队列中,并定期清空队列并发送所有请求。
  2. 使用后台线程来排空队列 - 连接可以维护待处理请求的列表,并有一个后台线程来排空队列(通过一些同步)
  3. 执行器服务 - 将请求传递给服务并从后台线程调用处理程序。
  4. 异步 channel - 最高级的方法,委托(delegate)给实现

其中任何一个更好用,或者如果您有任何其他一般想法,请分享您的评论。

最佳答案

您的大多数建议实际上都是对同一事物的不同装饰方式。

在幕后,执行程序服务有一个由 1 个或多个后台线程组成的池,用于耗尽队列。请求被提交给它。

1 和 2 都是“将要做的事情排队,有一个线程来处理它”的意思

所以基本上 1 和 2 都是彼此的变体。它们也是 3 的子集。

对于 4。我不确定你的意思是什么?

ExecutorService 旨在完全完成您想要做的事情 - 如果您有多个线程来执行任务,那么这显然是实现这一目标的方法。

如果您只有一个线程,您仍然可以使用ExecutorService,但选择不太明确。只需使用线程和 BlockingQueue 就相当简单,因此这可能是可行的方法。

关于java - 如何实现异步计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22202183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com