定时器执行后的代码不工作



这是代码:

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()不会被执行。为什么如此?

是否有另一种方法可以在后台重复执行一个操作,而其他操作也在执行?

当我用下面的虚拟实现尝试它时,它似乎像宣传的那样工作:

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)...

您发布的代码创建了计时器,并且System.out.println("null");在实例化后立即运行,而不是计时器类的一部分。

那么,您的输出,按原样,将是:

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

最新更新