前言:
目前我们对“javatimer定时”可能比较关心,同学们都想要剖析一些“javatimer定时”的相关文章。那么小编也在网摘上网罗了一些对于“javatimer定时””的相关资讯,希望各位老铁们能喜欢,咱们一起来了解一下吧!在做监控系统的时候,用到了定时任务来定时获取一些硬件的数据。于是就对比了一下go的定时任务实现和java的定时任务实现。这里只是对比了java的timer和go的time.NewTicker(),time.After().
1. 延时执行的实现
go的用法为:
timer := time.AfterFunc(1*time.Second, Add1) timer.Stop()
java的用法为:
//创建定时器对象 Timer t=new Timer(); //在3秒后执行MyTask类中的run方法 t.schedule(new MyTask(), 3000); t.cancel();
java实现延时执行的定时器是需要先实现一个集成了TimerTask的类,然后通过Timer类创建一个定时器。在延迟3秒后执行,同时只执行一遍。
go实现延迟执行是调用time.AfterFunc()实现,通过这个函数有2个参数,一个是时间,一个执行的方法。
以上实现都是一次性的,也就是执行一次后就不会再执行。
2. 延迟执行+周期执行
go的用法为:
timer := time.AfterFunc(1*time.Second, Add1) timer.Stop() fmt.Println(timer) tick := time.NewTicker(3 * time.Second) for { select { case c := <-tick.C: fmt.Println(c) Add1() } }
java的用法为:
//创建定时器对象 Timer t=new Timer(); //在3秒后执行MyTask类中的run方法 t.schedule(new MyTask(), 3000,5000);
在周期性的定时任务实现上,java相对比go的实现简单,只需要在后面再加一个周期间隔时间的参数即可。
而go需要用到一个time.NewTicker(),他和AfterFunc不同在于,他是周期执行的,而AfterFunc只执行一次。在实现上是通过建立一个tick,然后执行死循环。tick会周期的往通道内放时间,我们只需要在循环内执行通道取值即可调用方法。由于tick第一次执行是延迟时间执行。启动时并不会执行所以一般必须结合AfterFunc一起使用。
标签: #javatimer定时