如何在不使用线程的情况下在java中使用timer?

时间:2014-08-06 12:56:53

标签: java wait

如何在不使用Thread.sleep的情况下让java程序等待X秒?

public class newClass{
     public static void main(String[] args){
           for(int i = 0; i < 10; i++){
               //Wait X second 
               System.out.println("Hello");
           }
     }
}

感谢您的帮助!!

我需要程序在计算时不会冻结

5 个答案:

答案 0 :(得分:1)

如果您的问题是您不希望程序冻结,请考虑使用线程。此示例可能与您希望实现的类似:http://docs.oracle.com/javase/tutorial/essential/concurrency/simple.html

答案 1 :(得分:1)

您可以使用Java的Timer和TimerTask类。

 import java.util.Timer;
 import java.util.TimerTask;
 public class newClass extends TimerTask{
      int i = 10;
      static Timer timer;

      @Override
      public void run(){
           System.out.println("hello");
           i--;
           if (i == 0)
               timer.cancel();

      }

      public static void main(String[] args){
           TimerTask timerTask = new newClass();
           timer = new Timer(false);
           timer.scheduleAtFixedRate(timerTask, 0, 5 * 1000);
      }
 }

并且Timer在后台运行自己的线程,因此它不会冻结你程序的其余部分!

答案 2 :(得分:0)

这是一个糟糕的方法,但你可以使用它:

 public class newClass{
      public static void main(String[] args){
           int X = 5;
           for(int i = 0; i < 10; i++){
               long s = System.nanoTime();
               while( (System.nanoTime() - s) / 1000000000 < X);
               System.out.println("Hello");
           }
      }
 }

您也可以使用

System.currentTimeMillis()

答案 3 :(得分:0)

您真正需要的是多线程实现。这将允许您在等待另一个区域完成处理时继续与应用程序的一个区域进行交互。

修改的 好的,在评论中进一步澄清之后,这听起来不是你想要的。也许你可以在HashMap中注册每个孩子的时间。然后监控地图以查看时间到了。

答案 4 :(得分:0)

好像你想要你的程序启动,在X时间过后,在输出流上打印“Hello”?

  1. 按照ocozalp的建议
  2. 或使用Thread.sleep(x);方法
  3. 这两个选项都会给你完全相同的结果,虽然选项2是首选,因为你允许CPU在主线程处于休眠状态时执行其他操作,并且因为使用选项1会产生你的意图程序不太清楚。