持续时间后的java退出方法
我正在试图找出一种方法,如果需要超过2秒的时间,就可以退出方法调用 执行其方法体中的所有内容。例如,我有一个巨大的字符串列表和 希望迭代列表,但仅在2秒内迭代尽可能多的字符串。 假设列表中有9000个对象,但只能在2秒内迭代6500个对象 应该在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());
}
# 1 楼答案
即使使用^{} 中断线程,也需要定期检查是否请求了中断(使用^{} 或
Thread.isInterrupted()
),然后决定如何处理因此,一个好的一般模式是:
如果超时,返回什么取决于您,但是如果中断,您可以抛出一个^{}
当然,如果你不打算在一个单独的线程中启动你的方法,那么你不需要担心中断检查——只需要超时
# 2 楼答案
前提:在对集合进行迭代时,要删除元素,必须使用相同的迭代器,否则会出现异常:
如果要停止的程序是一个循环,且单个迭代不包含任何可能阻塞的内容,则只需计算结束瞬间,并在X次迭代后进行检查:
{cd1}在程序中使用^和^更健壮的方法
这样,如果结果在允许的时间内没有准备好,监视器就会出现异常
作为最后一点,请考虑包装的任务仍在运行和占用资源,因此您可能希望从主线程设置一个^ {< CD2>}标志到^ {CD3>},以便尽早停止计算。p>