java - 持续时间后退出方法

标签 java

我正在尝试找出一种方法来退出方法调用,如果它花费的时间超过 2 秒 执行其方法主体中的所有内容。例如,我有一个巨大的字符串列表, 想遍历列表,但只在 2 秒内尽可能多地遍历字符串。 假设我在列表中有 9,000 个对象,但只能在 2 秒内迭代 6,500 个,方法 应在 2 秒后停止。这甚至有可能实现吗?我搜索并找到了如何停止线程和计时器(如何在一定持续时间后启动方法),但没有找到如何在持续时间后退出方法。

public ArrayList<String> removeWords(){

   //Want some sort of timer here that stops method body after 2 seconds

   for(String current: words){

            words.remove(current);
   }
}

public static void main(String [] args){
        ArrayList<String> wordList = removeWords();
        System.out.println("Number of words in list "+ wordList.size());
}

最佳答案

甚至使用 Thread.interrupt() 中断线程要求您定期检查是否已请求中断(使用 Thread.interrupted()Thread.isInterrupted()),然后决定如何处理。

所以一个好的通用模式是:

  1. 在处理方法的参数中接受超时(通常的模式是long timeout, TimeUnit unit)
  2. 定期(循环的每 n 次迭代,如果不影响性能,甚至是每次迭代)检查超时和中断(使用 System.currentTimeMillis()TimeUnit.toMillis() 来做比较)。
  3. 如果发生任何一个就返回

如果超时返回什么由你决定,但对于中断你可以抛出一个new InterruptedException() .

当然,如果您不打算在单独的线程中启动您的方法,那么您无需担心中断检查 - 只需担心超时。

关于java - 持续时间后退出方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32276095/

相关文章:

java - 将 RGB 值转换为颜色

java - ViewPager 显示页面不按顺序

java - 如何测试我的 jar 文件是否有任何 Unresolved 依赖项?

java - 共享偏好 VS 上下文?

java swing 对齐单选按钮

java - 抽象类中的可选方法实现

java - 制作 Android IME 时未收到 BIND_INPUT_METHOD

java - 项目在 IDE 中运行良好,但在 Jar 中运行不佳

Java 组件最大尺寸

java - 在静态构造期间获取类名