Java Thread.sleep查询

时间:2015-05-28 16:47:49

标签: java

所以我想知道无论如何我都可以实现这个代码,以便它在每次循环迭代时暂停。目前,当我运行代码时,程序将停止n秒(n是循环迭代的数量),然后立即显示所有内容。但是,我希望它显示一个项目,等待一秒钟并显示下一个项目。我希望这很清楚。

while(x > 0 || y > 0){
        Try{
            Thread.sleep(1000);
        } catch (InterruptedException ie) {
            ie.printStackTrace();
        }

        // Print x and y
        //Change x and y vals

        }
    }

3 个答案:

答案 0 :(得分:0)

建议:在一个方法中将线程休眠分开来完成工作而不重写所有这些代码。

建议2:搜索线程睡眠是否是最适合您的解决方案

试试这个:

    public void waitSeconds(int seconds){
       try{ 
           Thread.sleep(seconds*1000l); 
       } catch(Exception e) {
          e.printStackTrace(); //ugly but enough to explain
       };
    }
    public void yourMethod(){
        while(x > 0 || y > 0){
            waitSeconds(1);
            print x
            waitSeconds(1);
            print y
            //Change x and y vals    
            }
    }

答案 1 :(得分:0)

首先,don't suppress InterruptedException。如果没有什么可以做的,根本就不要抓住它,或者把它转换为RuntimeException,例如。

throw new RuntimeException(ie);

其次,听起来您正在描述flushing问题,可以通过添加以下内容来解决:

System.out.flush();

打印您的值后。但是,如链接问题中所述,只要打印新行,System.outSystem.err就会自动刷新;你打印到stdout,还是不打印新行?

您需要在需要暂停的程序中进行Thread.sleep()来电,因此如果您需要在打印xy之间暂停,请在它们之间添加另一个Thread.sleep()

答案 2 :(得分:-1)

真的很奇怪。试试这个:

while(x > 0 || y > 0) {
    // Print old values
    // Change your x and y
    // Print new values

    try {
        TimeUnit.SECONDS.sleep(y);
    } catch(InterruptedException ex) {}
}