Golang周期任務(wù)、定時(shí)任務(wù)

0.周期任務(wù)

5秒鐘后執(zhí)行一個(gè)任務(wù)ticker.C是一個(gè)緩沖為1的channel,

ticker:=time.NewTicker(time.Second*5)
    go func() {
        for _=range ticker.C {
            println("test")
        }
    }()

time.Sleep(time.Minute)

1.倒計(jì)時(shí)

//主線程阻塞

timer1:=time.NewTimer(time.Second*5)
<-timer1.C
println("test")
//主線程不阻塞
    timer2 := time.NewTimer(time.Second)

    go func() {

        //等觸發(fā)時(shí)的信號(hào)

        <-timer2.C

        fmt.Println("Timer 2 expired")

    }()

    //由于上面的等待信號(hào)是在新線程中,所以代碼會(huì)繼續(xù)往下執(zhí)行,停掉計(jì)時(shí)器

    time.Sleep(time.Second*5)

2.高級(jí)倒計(jì)時(shí)

//golang 定時(shí)器,啟動(dòng)的時(shí)候執(zhí)行一次,以后每天晚上12點(diǎn)執(zhí)行
func startTimer(f func()) {
        go func() {
            for {
                f()
                now := time.Now()
                // 計(jì)算下一個(gè)零點(diǎn)
                next := now.Add(time.Hour * 24)
                next = time.Date(next.Year(), next.Month(), next.Day(), 0, 0, 0, 0, next.Location())
                t := time.NewTimer(next.Sub(now))
                <-t.C
            }
        }()
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,697評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,351評(píng)論 25 708
  • 他們也有自己的人生,如果我們總是想做別人人生的中心,那么他把自己放在哪里呢。 但是既然是我選擇的路,只要你對(duì)我始終...
    我是Kaila閱讀 288評(píng)論 0 0
  • 我把心事藏在簡(jiǎn)書里, 沒有任何企圖。 深一下,淺一下的腳印, 迤邐了來時(shí)的路。 樺木搭建的白色小屋, 走出穿著火紅...
    昏塵居士閱讀 438評(píng)論 3 11

友情鏈接更多精彩內(nèi)容