上次写了一篇关于golang crontab的用爱疯,这次说下golang timer定时器的用法。 golang的time.NewTicker创建定时任务时,是阻塞同步的。如果不想因为同步阻塞了main线程,可以给每个定时函数分配一个goroutine协程。
该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新。
golang的time模块提供了两个定时函数。 需要注意的是golang timer定时器是不能stop停止的,只能在逻辑上通过标示位来退出定时任务 。
// xiaorui.cc // 使用AfterFunc time.AfterFunc(5 * time.Minute, func() { fmt.Printf("expired") } // timer := time.NewTimer(5 * time.Minute) <-timer.C fmt.Printf("expired")
时间格式:
秒: time.Second 分钟: time.Minute
下面是go timer的具体使用实例。
package main // xiaorui.cc import ( "fmt" "time" ) func testTimer1() { go func() { fmt.Println("test timer1") }() } func testTimer2() { go func() { fmt.Println("test timer2") }() } func timer1() { timer1 := time.NewTicker(2 * time.Second) select { case <-timer1.C: testTimer1() } } func timer2() { timer2 := time.NewTicker(3 * time.Second) select { case <-timer2.C: testTimer2() } } func main() { go timer1() go timer2() fmt.Println("will end") time.Sleep(5 * time.Second) }
定时任务的实现本来就没啥好说的,如果想实现那种可控的定时器,需要自己设置flag判断状态。 另外避免任务的同步阻塞,除非你本就想同步执行。
END.