定时器Timer和Ticker
生活随笔
收集整理的這篇文章主要介紹了
定时器Timer和Ticker
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Timer
Timer是一個(gè)定時(shí)器,代表未來(lái)的一個(gè)單一事件,通過(guò)Timer本身提供的管道將事件傳遞出去,言外之意是只執(zhí)行一次。
Timer的數(shù)據(jù)結(jié)構(gòu)如下:
type Timer struct {C <-chan Timer runtimeTimer } package mainimport ("fmt""time" )func main() {// 1.timer基本使用timer1 := time.NewTimer(2 * time.Second)t1 := time.Now()fmt.Printf("當(dāng)前時(shí)間為:%v\n", t1)// 從定時(shí)器拿時(shí)間數(shù)據(jù)t2 := <-timer1.Cfmt.Printf("定時(shí)兩秒后:%v\n", t2)// 2.驗(yàn)證timer只能響應(yīng)1次timer2 := time.NewTimer(time.Second)for {<-timer2.Cfmt.Println("時(shí)間到,當(dāng)前for循環(huán)不再執(zhí)行")}// 3.timer實(shí)現(xiàn)延時(shí)的功能//(1)休眠一秒鐘time.Sleep(time.Second)//(2)定時(shí)兩秒鐘timer3 := time.NewTimer(2 * time.Second)<-timer3.Cfmt.Println("定時(shí)2秒到")//(3)延時(shí)兩秒鐘<-time.After(2*time.Second)fmt.Println("延時(shí)2秒到")// 4.停止定時(shí)器timer4 := time.NewTimer(2 * time.Second)go func() {<-timer4.Cfmt.Println("定時(shí)器執(zhí)行了")}()// 停止定時(shí)器b := timer4.Stop()if b {fmt.Println("timer4已經(jīng)停止")}// 5.設(shè)置定時(shí)為三秒鐘timer5 := time.NewTimer(3 * time.Second)// 重置定時(shí)器為一秒鐘timer5.Reset(1 * time.Second)fmt.Println(time.Now())fmt.Println(<-timer5.C)for {} }Ticker
Ticker是周期性定時(shí)器,即周期性的觸發(fā)一個(gè)事件,通過(guò)Ticker本身提供的管道將事件傳遞出去,言外之意是可以重復(fù)執(zhí)行。
Ticker的數(shù)據(jù)結(jié)構(gòu):
type Ticker struct {C <-chan Timer runtimeTimer } package mainimport ("fmt""time" )func main() { 1.無(wú)限定時(shí)循環(huán)//ticker := time.NewTicker(1 * time.Second)//defer ticker.Stop()//for range ticker.C {// fmt.Println("滴答滴答滴答")//}// 2.限定循環(huán)次數(shù)執(zhí)行ticker := time.NewTicker(1 * time.Second)defer ticker.Stop()i := 0// 子協(xié)程go func() {for {i++fmt.Println(<-ticker.C)if i == 5 {//停止ticker.Stop()}}}()for {} }總結(jié)
以上是生活随笔為你收集整理的定时器Timer和Ticker的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Select多路复用
- 下一篇: 并发安全Sync包的使用