Код после выполнения таймера не работает

#java #timer

#java #таймер

Вопрос:

Это код:

 public class Controller {
    NetworkDiscovery n;
    public static int discoveryInterval=2000;

    public static void main(String[] args) throws UnknownHostException{
        Timer t1=new Timer();
        t1.scheduleAtFixedRate(new NetworkDiscovery(), 2000, discoveryInterval);
        System.out.println("null");
    }
}
  

Предполагая, что существует класс NetworkDiscovery, в котором есть run(), и все в нем работает нормально, одна println() не выполняется. Почему так?

Есть ли другой способ многократно выполнять действие в фоновом режиме, пока выполняются и другие действия?

Комментарии:

1. Не удается воспроизвести вашу ошибку. Вы уверены, что ‘println() сам по себе не выполняется’?

Ответ №1:

Когда я попробовал это со следующей фиктивной реализацией, кажется, что она работает так, как рекламируется:

 import java.net.UnknownHostException;
import java.util.Timer;
import java.util.TimerTask;

public class Controller {

    private static final class NetworkDiscovery extends TimerTask {
        @Override
        public void run() {
            System.out.println("NetworkDiscovery");
        }
    }

    NetworkDiscovery n;
    public static int discoveryInterval = 2000;

    public static void main(String[] args) throws UnknownHostException {
        Timer t1 = new Timer();
        t1.scheduleAtFixedRate(new NetworkDiscovery(), 2000, discoveryInterval);
        System.out.println("null");
    }
}
  

Я получаю следующий вывод:

 null
NetworkDiscovery
NetworkDiscovery
...(every 2000 milliseconds)...
  

Ответ №2:

Опубликованный вами код создает таймер и System.out.println("null"); запускается сразу после создания этого экземпляра, а не является частью класса timer .

Итак, ваш вывод, как есть, будет:

 null                                      <- only happens once
[output from NetworkDiscovery() method]
[output from NetworkDiscovery() method]
[output from NetworkDiscovery() method]   <- repeated every 2 seconds