Я уже знаком с повторением задач каждые n секунд с помощью Java.util.Timer и Java.util.TimerTask. Но допустим, я хочу выводить на консоль «Hello World» каждые случайные секунды от 1 до 5. К сожалению, я немного тороплюсь, и пока у меня нет кода. Любая помощь будет принята.

HoopsMcCann

Ответов: 3

Ответы (3)

Это может быть хорошим способом начать ...

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

Сделаем это за 2 шага:

  • получить случайное число от 1 до 5
  • запланируйте свой таймер до этого числа, чтобы вызвать функцию

    статический таймер таймера = new Timer ();
    
    статический класс TimTask расширяет TimerTask {
        public void run () {
            int delay = (1 + new Random (). nextInt (4)) * 1000;
            timer.schedule (новый TimTask (), задержка);
            System.out.println ("Привет, мир ..!");
        }
    }
    public static void main (String [] args) выдает исключение {
        новый TimTask (). run ();
    }
    
  • Вот пример. Но если вы не можете использовать Java 8, вам нужно заменить лямбда-выражение анонимным классом.

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

    Этот код выводит «Hello World» 10 раз и каждый раз ждет от 1 до 5 секунд.

    2022 WebDevInsider