【问题标题】:Code after TImer execution not working定时器执行后的代码不起作用
【发布时间】:2011-10-04 13:44:16
【问题描述】:

这是代码:

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() 单独不会被执行。为什么会这样?

是否有另一种方法可以在后台重复执行某项操作而同时执行其他操作?

【问题讨论】:

  • 无法重现您的错误。你确定“单独的 println() 不会被执行”吗?

标签: java timer


【解决方案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"); 在实例化后立即运行,而不是计时器类的一部分。

    因此,您的输出将是:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-25
      • 2013-06-11
      • 1970-01-01
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 2020-12-04
      相关资源
      最近更新 更多