【问题标题】:Executing method 1 to N times per second每秒执行方法 1 到 N 次
【发布时间】:2019-06-01 12:25:57
【问题描述】:

我们来看下面的执行例子:

MyRequest request = new MyRequest(args);
request.execute(params);

我怎样才能每秒执行上述1n 次(即n=50)?

编辑

此外,如果我们有i 对象,每个对象都调用n 请求:

for(MyObject obj : objects) {
    // Execute n requests (i.e. in for loop)
}

如何确保执行在一秒钟内发生?

【问题讨论】:

    标签: java methods time timer


    【解决方案1】:

    要确保在 1 秒内执行 n 个请求,您必须知道 1 次执行持续多长时间才能顺序运行它们,否则您应该使用线程并行运行它们并延迟启动它们以完全适合 1 秒

    for(int i=0;i<n;i++){
       MyRequest request = new MyRequest(args);
       Thread th=new Thread(()-> request.execute());
       th.start();
       Thread.sleep(1000/n);
    }
    

    【讨论】:

    • 感谢您的回答!这仍然适用于我刚刚进行的编辑吗?
    • 你想让第一个obj在1Second调用n个execute(),然后在接下来的第二个obj调用n个execute()?如果是这样,您只需替换 Thread.sleep(1000/n);与 Thread.sleep(1000/objects.size());如果您希望对象中的所有 obj 在 1 秒内并行执行 n 次调用:for(int i=0;i&lt;n;i++){ for(MyObject obj : objects) { Thread th=new Thread(()-&gt; obj.execute()); th.start(); } Thread.sleep(1000/objects.size()); }
    • 您了解创建和启动线程并不是免费的。启动 50 个线程可能会显着增加性能损失。
    • 请注意Thread 类的start() 方法并不能保证线程会真正执行,这取决于线程调度程序,因此不能保证n 执行在n 秒内。
    • @AdamMcClenaghan 没错,但目标是在一秒钟内执行 n。有没有办法保证这一点?至于性能@GhostCat - 这是一项无需担心性能损失的研究任务:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多