java - 我有很多分析调用要发送,如果缓冲区未满,如何缓冲它们并在一定时间内刷新

标签 java multithreading spring-boot

我有一个 Spring Boot 应用程序,必须使用自定义代码发送分析数据。 我不希望每次收到记录时都发送数据,而是缓冲它们并以批量 X 元素发送它们。 例如,如果批量大小为 10,而我在 2 分钟内只收到 5 个,我需要发送所有这些并重新开始。

我使用术语“缓冲区”是因为我没有找到更好的方法来描述它。 实现这样的事情的最佳方法是什么?是否有现有的 API 可以实现相同的功能?

最佳答案

您可以使用CountDownLatch .

public class Sender implements Runnable {
  public CountDownLatch recordCount;
  public sender(CountDownLatch recordCount) {
     this.recordCount = recordCount;
  }
  public void run() {
    recordCount.await(2, TimeUnit.MINUTES); // this will stop waiting after 2 minutes or countDown is complete
    //send records in buffer
  }
}

public class Receiver implements Runnable {
  public CountDownLatch recordCount;
  public receiver(CountDownLatch recordCount) {
     this.recordCount = recordCount;
  }
  public void run() {
    //recieve and add to buffer
    recordCount.countDown(); // this will deceremnt the count
  }
}

关于java - 我有很多分析调用要发送,如果缓冲区未满,如何缓冲它们并在一定时间内刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61678192/

相关文章:

java - liquibase 与 Spring Boot 2 集成时出错

java - 如何最好地清理 Java webapp 中的输入

java - 是否可以在不使用 docker 的情况下使用 gitlab-ci 将简单的 java web 应用程序部署到本地服务器?

c++ - C++中如何停止线程的执行

c# - 为什么 CollectionViewSource.GetDefaultView(...) 从任务线程内部返回错误的 CurrentItem?

elasticsearch - spring-data-elasticsearch - Jackson 无法使用全局配置进行序列化

java - 控制运行时要抓取的 URL 列表

java - JSONObject 等实例化崩溃

php - 用PHP编写线程安全的文件

java - 如何通过很多id找到一些数据?