当前位置: 首页 > 面试题库 >

设置方法/线程的最大执行时间

皮弘博
2023-03-14
问题内容

我有一个方法,可以写入数据库。要求是确保经过一定时间后该方法不执行。如果在此之前返回,则什么也不做。

我能想到的一种基本方法就是这样做。

public class LimitedRuntime {

    public static void writeToDb(){
            // writes to the database
    }

    public static void main(String[] args) {
        long totalExecutionTime = 8000L;
        long startTime = System.currentTimeMillis();

        while(System.currentTimeMillis() - startTime < totalExecutionTime )
        {
            writeToDb();
        }   
    }
}

这种方法的一个问题是,即使方法在最大总执行时间之前返回,程序也会暂停以等待经过的时间。

我该如何做得更好(或更正确)?如果使用Thread,我们如何找出Thread执行该方法的对象?


问题答案:

您可以通过将工作发送给执行者来做到这一点:

 public static void main(String[] args) {
    ExecutorService executor = Executors.newFixedThreadPool(4);

    Future<?> future = executor.submit(new Runnable() {
        @Override
        public void run() {
            writeToDb();            //        <-- your job
        }
    });

    executor.shutdown();            //        <-- reject all further submissions

    try {
        future.get(8, TimeUnit.SECONDS);  //     <-- wait 8 seconds to finish
    } catch (InterruptedException e) {    //     <-- possible error cases
        System.out.println("job was interrupted");
    } catch (ExecutionException e) {
        System.out.println("caught exception: " + e.getCause());
    } catch (TimeoutException e) {
        future.cancel(true);              //     <-- interrupt the job
        System.out.println("timeout");
    }

    // wait all unfinished tasks for 2 sec
    if(!executor.awaitTermination(2, TimeUnit.SECONDS)){
        // force them to quit by interrupting
        executor.shutdownNow();
    }
}


 类似资料:
  • 问题内容: 我有一个XML文档,其中包含大约48,000个子级(〜50MB)。我运行INSERT MYSQL查询,为这些子项中的每个子项都创建新条目。问题是,由于其大小,它需要很多时间。执行后,我收到这个 如何将最大执行时间设置为无限制? 谢谢 问题答案: 您可以通过在您的php代码中设置set_time_limit来实现(无限制地设置为0) 或者直接在您的php.ini中修改max_execut

  • 问题内容: 当我尝试在phpMyadmin中执行(某些)查询时,出现此错误 致命错误:第140行的C:\ xampp \ phpmyadmin \ libraries \ dbi \ mysql.dbi.lib.php中超过60秒的最大执行时间 因为我有一个很大的表(超过900万条记录) 我已经编辑了文件C:\ xampp \ php \ php.ini 并将“最大执行时间”的值从60更改为100

  • 本文向大家介绍Spring Boot中配置定时任务、线程池与多线程池执行的方法,包括了Spring Boot中配置定时任务、线程池与多线程池执行的方法的使用技巧和注意事项,需要的朋友参考一下 配置基础的定时任务 最基本的配置方法,而且这样配置定时任务是单线程串行执行的,也就是说每次只能有一个定时任务可以执行,可以试着声明两个方法,在方法内写一个死循环,会发现一直卡在一个任务上不动,另一个也没有执行

  • 在 php-fpm 中有 max_execution_time 这个选项,用来限定请求最大执行时间。 imi 提供了一个中间件,用以支持设置最大请求执行时间,如果超时可以做提前返回结果的处理。 使用方法 启用 在服务器配置 beans 节中配置中间件ExecuteTimeoutMiddleware: [ 'HttpDispatcher' => [ 'middle

  • 问题内容: 我添加了增加执行时间的功能,但最多只能执行2-3分钟。 我想从一个需要很长时间的站点上搜索链接。 任何帮助将不胜感激。 非常感谢。 问题答案: PHP文件(例如,my_lengthy_script.php) .htaccess文件 更多配置选项 如果是wordpress,请在config.php文件中进行设置, 如果是drupal,则为sites / default / setting

  • 什么是最好的方法来衡量Android代码段的执行时间? 我有一段前后的代码,我想用时间戳来确定它的执行时间(例如,中的一段,以及活动方法中的另一段)。 我已经试过了。toMillies(false),但它只会向我返回秒数(最后是常量)。我还尝试了两个java函数:和。第一个返回纪元时间的毫秒,第二个不返回。 测量执行时间并获得良好精度的最佳方法是什么?