Java 如何在设定的时间段内递归调用函数?
当且仅当此方法的总执行时间为Java 如何在设定的时间段内递归调用函数?,java,Java,当且仅当此方法的总执行时间为long startTime=System.currentTimeMillis()时,我希望在捕获IOException时递归调用run()函数; while(System.currentTimeMillis()-startTime这应该总是错误的事实:System.nanoTime()哦,为什么?你知道更好的方法吗?注意:在这里使用递归是个坏主意。记住:每个方法调用都会创建另一个堆栈帧。当你使用递归时,这些堆栈帧开始堆叠(因为方法需要在其堆栈帧可以被丢弃之前结束)。
long startTime=System.currentTimeMillis()时,我希望在捕获IOException时递归调用run()函数;
while(System.currentTimeMillis()-startTime这应该总是错误的事实:System.nanoTime()哦,为什么?你知道更好的方法吗?注意:在这里使用递归是个坏主意。记住:每个方法调用都会创建另一个堆栈帧。当你使用递归时,这些堆栈帧开始堆叠(因为方法需要在其堆栈帧可以被丢弃之前结束)。因此:如果不知道方法将被调用多少次,则永远不要使用递归。否则,可能会出现不确定的stackoverflow异常。当然,在这里,您可能只有几个递归,但仍然存在。考虑这一点的一种方法是:执行特定操作的命令对象。命令操作可以进入队列,而命令可能会进入队列决定…简单地将自己添加到这样一个队列中,以防需要“重复”。@Kevin您正在检查自1970年1月1日以来是否已经过了不到10秒。@Dora为什么在这里需要而呢?@mangusta递归调用run()方法10秒。@Dora“10秒”是什么意思?作者明确指出,如果总执行时间小于10秒,则应调用run
,无论您是否想要精度。它更可能是单调增加的。无论您看到什么样的跳跃,但使用currentTimeMillis()更可能
。有更多信息。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread() {
public void run() {
Document doc;
try {
doc = Jsoup.connect("http://google.comt/").get();
runOnUiThread( new Runnable()
{
public void run()
{
// do stuff
}
});
} catch (IOException e) {
e.printStackTrace();
if (System.nanoTime() <= 10000000000L) { // 10 seconds
run(); // RECURSIVE CALL
}
}
}
}.start
}
long startTime = System.currentTimeMillis();
while(System.currentTimeMillis() - startTime <= 10000){
run();
}
long startTime = System.nanoTime();
while(System.nanoTime() - startTime <= 10000000000){
run();
}