我正在寻找Java中监视计算机时钟(分钟)并在每次更改时启动方法/线程的最佳方法。Java事件监听器在时钟上分钟更改
所以如果时间是13:20,它会变成13.21然后做点什么。所以任何时候有一点点改变,一些代码就会被解雇。
什么是最好的方式来听更改时钟的分钟部分?
感谢, 理查德
我正在寻找Java中监视计算机时钟(分钟)并在每次更改时启动方法/线程的最佳方法。Java事件监听器在时钟上分钟更改
所以如果时间是13:20,它会变成13.21然后做点什么。所以任何时候有一点点改变,一些代码就会被解雇。
什么是最好的方式来听更改时钟的分钟部分?
感谢, 理查德
Date d = new Date(System.currentTimeMillis());
然后你就可以通过d.getMinutes()
拿到分钟。在等待d.getMinutes()
的值更改的线程中运行检查。
听起来像是Quartz工作。您可以使用下面的cron表达式做到这一点:
0 * * * * ?
在该TimerTask的事件处理程序计划一个新的重复发生的TimerTask运行每60,000毫秒。
int milisInAMinute = 60000;
long time = System.currentTimeMillis();
Runnable update = new Runnable() {
public void run() {
// Do whatever you want to do when the minute changes
}
};
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
update.run();
}
}, time % milisInAMinute, milisInAMinute);
// This will update for the current minute, it will be updated again in at most one minute.
update.run();
这涉及到很多的忙等待。 – Charlie 2013-08-19 18:47:57
@Charlie,这取决于你想要的精度。只需在检查周期中使用[wait(long)](http://docs.oracle.com/javase/6/docs/api/java/lang/Object.html#wait(long))。 – dant3 2013-09-26 22:37:05
仍在忙着等待。时钟将在-checkCycle和+ checkCycle之间关闭。 – Charlie 2013-10-02 18:06:44