关于golang timer定时器的详细用法

上次写了一篇关于golang crontab的用爱疯,这次说下golang timer定时器的用法。  golang的time.NewTicker创建定时任务时,是阻塞同步的。如果不想因为同步阻塞了main线程,可以给每个定时函数分配一个goroutine协程。 


该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新。

http://xiaorui.cc/2016/03/06/%E5%85%B3%E4%BA%8Egolang-timer%E5%AE%9A%E6%97%B6%E5%99%A8%E7%9A%84%E8%AF%A6%E7%BB%86%E7%94%A8%E6%B3%95/

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.


大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc

发表评论

邮箱地址不会被公开。 必填项已用*标注