#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