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();
    }