java多线程如何在指定的时间(间隔)内实现有限数量的操作?

java多线程如何在指定的时间(间隔)内实现有限数量的操作?,java,Java,问题描述:我有一个多线程程序,可以调用外部接口来获取数据,现在另一方只支持6000次/分钟的访问。如果访问次数超过,则没有数据。如果线程数量减少,则不会超过该数量。然而,该计划需要更高的效率。我想最大限度地提高程序的速度。我想设计我的代码来控制一分钟内访问的次数(比如5800次),尝试了很多方法,检查了很多信息还是无法实现。是否有实现计划或框架?rxjava框架支持所有必须提供的运营商。您可能会使用它:通过创建接收虚拟事件的可观察对象 每个虚拟事件都会触发这样一个rest调用。您可以使用适当的r

问题描述:我有一个多线程程序,可以调用外部接口来获取数据,现在另一方只支持6000次/分钟的访问。如果访问次数超过,则没有数据。如果线程数量减少,则不会超过该数量。然而,该计划需要更高的效率。我想最大限度地提高程序的速度。我想设计我的代码来控制一分钟内访问的次数(比如5800次),尝试了很多方法,检查了很多信息还是无法实现。是否有实现计划或框架?

rxjava框架支持所有必须提供的运营商。您可能会使用它:通过创建接收虚拟事件的可观察对象

每个虚拟事件都会触发这样一个rest调用。您可以使用适当的rxjava操作符根据您的计时要求生成这些事件


当然,这与您通常使用该技术的方式相反。但事实是,这些运营商非常强大,而且经过了良好的测试。您甚至可以(轻松地)控制哪些线程将接收虚拟事件

你能分享你的代码吗?您尝试了哪些方法?如果操作是IO绑定的,则添加更多线程将无济于事。否则,您可以在1分钟内处理6k个请求,这意味着您最多每秒可以处理100个请求。如果每个请求需要5毫秒,您可以在一秒钟内满足200个请求。由于200将导致一半的请求不返回数据,因此根据增量/经过的时间,通过一些
睡眠
系统手动降低数据速度。知道一个线程可以处理多少个请求后,您可以相应地跨线程分割请求以满足您的需要。搜索
java throttle
您当前是否每秒轮询6000次(或更多)相同的数据,或者您的用例是什么?还有,“更高的效率”是什么意思?非常感谢,我根据@Andreas的指导方针解决了这个问题。Stackoverflow也有类似的问题。非常感谢,我根据@Andreas的指导原则解决了这个问题