我想知道如何向其他api发送多个请求并每隔一秒更新我们数据库的响应状态,让发送请求的TPS = 15。我使用了Timer和ScheduleExecutorService,如下所示。但两者都不支持周期性地每1秒发送15个请求。有时它效果很好,每秒 requests = 15 。有时只有 requests = 13 在 11:04:01 和 requests = 17 在 11:04:02。通过查看秒数,在 11:04:01 我想发送的是 15 条记录,实际上发送了 13 条记录,相差 2 条记录。所以,又一个 11:04:02 ,到这一秒还剩下 2 条记录,总记录变成 15+2 = 17 条记录。因此,请帮助我解决这个问题,以及我应该使用哪种技术或库,而不是同时使用 Timer 和 ScheduledExecutorService。
Timer timer = new Timer();
timer.schedule(new sendRequest(), 0, 1000);
///////////////////////////////////////////////
ScheduledExecutorService executor =
Executors.newSingleThreadScheduledExecutor();
Runnable periodicTask = new Runnable() {
public void run() {
// Invoke method(s) to do the work
doPeriodicWork();
}
};
executor.scheduleAtFixedRate(periodicTask, 0, 1, TimeUnit.SECONDS);
这是附件日志文件的屏幕截图。 mismatch and merge records in next second log screenshot in each second
最佳答案
public class SendTPS extends TimerTask {
public static void main(String[] args){
int maxTPS = 15;
Timer timer = new Timer();
int maxSleepInterval = Math.round((1000 / maxTPS));
timer.schedule(new SendTPS(), 0, maxSleepInterval);
}
public static void fetchData(){
System.out.println(new SimpleDateFormat("HH:mm:ss").format(new
java.util.Date())+"fetch data....");
}
public void run() {
fetchData();
}
}
关于java - 使用Java绝对每秒发送15条记录作为api请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51038500/