Java:每个随机秒重复任务

时间:2016-01-01 00:21:59

标签: java repeat

我已经熟悉使用Java.util.Timer和Java.util.TimerTask每n秒重复一次任务。但是,让我说我想打印" Hello World"从1-5开始每隔一秒到控制台。不幸的是,我有点匆忙,到目前为止还没有显示任何代码。任何帮助都会受到影响。

3 个答案:

答案 0 :(得分:3)

让我们分两步完成:

  • 获取1到5之间的随机数
  • 安排计时器直到此号码才能调用该功能

    static Timer timer = new Timer();
    
    static class TimTask extends TimerTask {
        public void run() {
            int delay = (1 + new Random().nextInt(4)) * 1000;
            timer.schedule(new TimTask(), delay);
            System.out.println("Hello world..!");
        }
    }
    public static void main(String[] args) throws Exception {
        new TimTask().run();
    }
    
  • 答案 1 :(得分:0)

    这可能是一个很好的开始......

    Random r = new Random();
    while(...){
        printHelloWorld();
        //calculate a random int between 1 and 5 and multiply for 1000
        Thread.sleep(r);
    }
    

    答案 2 :(得分:0)

    这是一个例子。但是如果你不能使用Java 8,你必须用一个匿名类替换lambda表达式。

    import java.util.Random;
    import java.util.Timer;
    import java.util.TimerTask;
    
    public class Time {
      final static Random rand = new Random();
    
      private static void _repeatRandom(Timer timer, long min, long max, int count, Runnable r) {
        if(count < 1) {
          timer.cancel();
          return;
        }
        long delay = (long)(rand.nextDouble() * (max - min)) + min;
        timer.schedule(new TimerTask() {
          public void run() {
            r.run();
            _repeatRandom(timer, min, max, count - 1, r);
          }
        }, delay);
      }
    
      static void repeatRandom(long min, long max, int count, Runnable r) {
        Timer timer = new Timer();
        _repeatRandom(timer, min, max, count, r);
      }
    
      public static void main(String[] args) {
        repeatRandom(1000, 5000, 10, () -> System.out.println("Hello World"));
      }
    }
    

    此代码打印&#34; Hello World&#34; 10次​​,每次等待1到5秒。