工作之余就想写这篇文章了,但是种种原因没有写上,回到家中记录一下,以供在被岁月摧残的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++的代码贴出来供大家学习。
分享到:
相关推荐
Linux下Timer的一种实现,主要利用Linux下的信号机制实现,有兴趣的可以使用虚拟时间机制。
Windows、Linux和TCP_IP中Timer的实现机制.pdf
是一个跨linux 和windows的计时器,C++,windows使用VS2010,Linux下的Makefile已经包含有,本计时器是粗略的计时器,很简单,很容易看懂,可以继续改良。
linux 下定时器timer alarm 和 settitimer使用
这是驱动开发中的关键技术,timer的编程。
我写的Linux版Timer定时器(源码),可在多线程间使用 Linux没有Timer,QT的timer又不支持多线程,是线程间不安全的 于是我自己写了个Linux下的Timer类
linux tick timer clock. just backup
Linux Timer方面的教程。解释详尽,清晰。例子清晰,实用。能很好的帮助你掌握Linux Timer。
linux下的一个基本定时器,精确到ms。访问接口类似于windows下的setTimer接口。
在 Win32 体系结构中有两种类型的线程:UI 线程和辅助线程。UI 线程绝大多数时间处于空闲状态,...Windows 计时器和基于服务器的计时器在运行时都使用 Interval 属性。线程计时器的时间间隔在 Timer 构造函数中设置。
Linux内核
源代码,可直接运行,计时器Timer用法研究,
linux 字符驱动实例,基于定时器的,可以用的源码。
在.NET Framework里面提供了三种Timer ① System.Windows.Forms.Timer ② System.Timers.Timer ③ System.Threading.Timer 现分述如下: 一、System.Windows.Forms.Timer 1、基于Windows消息循环,用事件方式触发,...
NULL 博文链接:https://cfan1874.iteye.com/blog/1765433
Zynq-Linux中timer中断的设计源码加axi-timer的参考文档
C语言02-Timer0-Timer1-Timer2-Timer3-Timer4测试程序(STC32G-DEMO-CODE-220311kw)C语言02-Timer0-Timer1-Timer2-Timer3-Timer4测试程序(STC32G-DEMO-CODE-220311kw)C语言02-Timer0-Timer1-Timer2-Timer3-Timer4...
timer定时器C++ WINDOWS下 附测试程序 欢迎共享
linux内核动态定时器的实现的详细介绍。对linux内核学习者会有一定帮助