`
qq7689791
  • 浏览: 9542 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Timer在windows和linux下的不同表现

    博客分类:
  • java
 
阅读更多
工作之余就想写这篇文章了,但是种种原因没有写上,回到家中记录一下,以供在被岁月摧残的N多年之后回忆一下,也许还可以给别人带来帮助,而更多的是为了温故而知新,不善言谈,直接上代码。

class MyTask extends TimerTask {
    public void run() {
        System.out.print("hello everybody!");
    }
}

Timer timer = new Timer();
timer.schedule(new MyTask(), 60*1000, 60*1000);

上面这段代码的意思非常简单,每隔60秒输出一次hello everybody!

那么问题来了!

1、如果在linux上面运行,调整了系统时间比当前时间多一分钟,那么这个输出不会等待60秒后输出,而是马上输出。
2、如果在window上面运行,调整了系统时间比当前时间多一分钟,这个输出还是需要等待60秒才会输出。

于是我分别查看了linux和window下的java soource,没发现出入。

然后我远程调试最终发现是因为Object.wait()方法是native实现的,调用的是dll文件,linux下的wait会受到系统时间调整的影响,而window不会,所以导致了这个问题,懒得找c++代码去看,而且猜也能猜到c++的大概写法,就到这了,有兴趣的童鞋可以把c++的代码贴出来供大家学习。
1
1
分享到:
评论
1 楼 houyujiangjun 2015-03-19  
这个我还真不知道, 多谢

相关推荐

Global site tag (gtag.js) - Google Analytics