欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語(yǔ)言定時(shí)器Timer和Ticker的使用與區(qū)別

 更新時(shí)間:2024年07月24日 09:47:08   作者:CodeJR  
在Go語(yǔ)言中內(nèi)置的有兩個(gè)定時(shí)器,Timer和Ticker,本文主要介紹了Go語(yǔ)言定時(shí)器Timer和Ticker的使用與區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下

概述

在日常開(kāi)發(fā)中,我們不可避免的需要使用到定時(shí)任務(wù)用來(lái)處理業(yè)務(wù)邏輯。在Go語(yǔ)言中內(nèi)置的有兩個(gè)定時(shí)器,Timer和Ticker,合理的使用這兩個(gè)定時(shí)器可以很好的解決定時(shí)任務(wù)的需求,同時(shí)除了這兩個(gè)內(nèi)置的定時(shí)器外,還有另外的三方庫(kù)也可以用來(lái)完成定時(shí)任務(wù)的需求。

Timer

簡(jiǎn)介

Timer定時(shí)器可以在指定時(shí)間后執(zhí)行一次,使用time包中的NewTimer方法傳入間隔時(shí)間參數(shù)即可創(chuàng)建一個(gè)Timer定時(shí)器,定時(shí)器將會(huì)在指定的時(shí)間后執(zhí)行一次。

Timer中共有以下方法可調(diào)用

// 創(chuàng)建
func NewTimer(d Duration) *Timer
// 重置
func (t *Timer) Reset(d Duration) bool
// 停止
func (t *Timer) Stop() bool

在Timer中除了有以上方法之外,還有最重要的就是Timer中包含一個(gè)時(shí)間類型的通道C,當(dāng)指定時(shí)間間隔到達(dá)后,就會(huì)將當(dāng)前時(shí)間發(fā)送到通道C中,這樣我們可以使用select監(jiān)聽(tīng)通道C即可完成在指定時(shí)間后執(zhí)行任務(wù)的需求。

基礎(chǔ)用法

我們根據(jù)上面的描述,完成了下面的代碼:

func main() {
    // 創(chuàng)建一個(gè)Timer定時(shí)器
    timer := time.NewTimer(time.Second * 2)
    // 延遲關(guān)閉定時(shí)器
    defer timer.Stop()
    fmt.Println("當(dāng)前時(shí)間:", time.Now())
    select {
        // 使用select監(jiān)聽(tīng)通道C
        case nowTime := <-timer.C:
        fmt.Println("間隔2秒后指定定時(shí)任務(wù),當(dāng)前時(shí)間:", nowTime)
    }
}

在idea中運(yùn)行代碼后會(huì)輸出以下內(nèi)容:

當(dāng)前時(shí)間: 2024-06-30 15:12:08.7736065 +0800 CST m=+0.002108801
間隔2秒后指定定時(shí)任務(wù),當(dāng)前時(shí)間: 2024-06-30 15:12:10.7797079 +0800 CST m=+2.008210201

Process finished with the exit code 0

可以看到,Timer定時(shí)器在指定時(shí)間后會(huì)執(zhí)行一次任務(wù),然后結(jié)束。

Reset使用

在上面的代碼中可以看到Timer在指定時(shí)間后僅能執(zhí)行一次任務(wù),但是我們可以使用Reset方法重置定時(shí)器,這樣的話可以在每次執(zhí)行任務(wù)后重置,用來(lái)達(dá)到每間隔指定時(shí)間都執(zhí)行一次任務(wù)的需求。

將代碼略做修改如下:

func main() {
    // 創(chuàng)建一個(gè)Timer定時(shí)器
    timer := time.NewTimer(time.Second * 2)
    // 延遲關(guān)閉定時(shí)器
    defer timer.Stop()
    fmt.Println("當(dāng)前時(shí)間:", time.Now())
    for {
        timer.Reset(time.Second * 2)
        select {
        // 使用select監(jiān)聽(tīng)通道C
        case nowTime := <-timer.C:
            fmt.Println("間隔2秒后指定定時(shí)任務(wù),當(dāng)前時(shí)間:", nowTime)
        }
    }
}

在上面代碼中可以看到在每次的循環(huán)中都重置一次Timer定時(shí)器,這樣的話就可以實(shí)現(xiàn)每隔一段時(shí)間都執(zhí)行一次任務(wù)的需求。

最終運(yùn)行結(jié)果如下:

當(dāng)前時(shí)間: 2024-06-30 15:16:01.2907834 +0800 CST m=+0.002052801
間隔2秒后指定定時(shí)任務(wù),當(dāng)前時(shí)間: 2024-06-30 15:16:03.3096846 +0800 CST m=+2.020954001
間隔2秒后指定定時(shí)任務(wù),當(dāng)前時(shí)間: 2024-06-30 15:16:05.3236498 +0800 CST m=+4.034919201
間隔2秒后指定定時(shí)任務(wù),當(dāng)前時(shí)間: 2024-06-30 15:16:07.3318153 +0800 CST m=+6.043084701
間隔2秒后指定定時(shí)任務(wù),當(dāng)前時(shí)間: 2024-06-30 15:16:09.3462966 +0800 CST m=+8.057566001
間隔2秒后指定定時(shí)任務(wù),當(dāng)前時(shí)間: 2024-06-30 15:16:11.3504773 +0800 CST m=+10.061746701
……

Ticker

簡(jiǎn)介

Ticker定時(shí)器的用法和Timer定時(shí)器的用法以及內(nèi)置的方法都一樣,區(qū)別在于Ticker不僅僅只執(zhí)行一次,而是會(huì)根據(jù)指定的時(shí)間間隔不停地執(zhí)行。

基礎(chǔ)用法

代碼如下:

func main() {
    ticker := time.NewTicker(time.Second * 2)
    defer ticker.Stop()
    fmt.Println("當(dāng)前時(shí)間:", time.Now())
    for {
        select {
        case nowTime := <-ticker.C:
            fmt.Println("間隔2秒后指定定時(shí)任務(wù),當(dāng)前時(shí)間:", nowTime)
        }
    }
}

根據(jù)Ticker寫出以上代碼,代碼會(huì)每隔2秒執(zhí)行一次,不需要像Timer中那樣每次使用Reset方法來(lái)重置定時(shí)器,最終運(yùn)行結(jié)果如下:

當(dāng)前時(shí)間: 2024-06-30 15:20:27.4070592 +0800 CST m=+0.002137901
間隔2秒后指定定時(shí)任務(wù),當(dāng)前時(shí)間: 2024-06-30 15:20:29.4083801 +0800 CST m=+2.003458801
間隔2秒后指定定時(shí)任務(wù),當(dāng)前時(shí)間: 2024-06-30 15:20:31.414517 +0800 CST m=+4.009595701
間隔2秒后指定定時(shí)任務(wù),當(dāng)前時(shí)間: 2024-06-30 15:20:33.4191099 +0800 CST m=+6.014188601
間隔2秒后指定定時(shí)任務(wù),當(dāng)前時(shí)間: 2024-06-30 15:20:35.4099723 +0800 CST m=+8.005051001
間隔2秒后指定定時(shí)任務(wù),當(dāng)前時(shí)間: 2024-06-30 15:20:37.4208446 +0800 CST m=+10.015923301
……

在Ticker定時(shí)器中同樣也有Reset方法,但是就算不調(diào)用Reset方法定時(shí)器也會(huì)一直執(zhí)行,所以這里的Reset方法可以用來(lái)重置定時(shí)器的間隔時(shí)間。

區(qū)別

  • Ticker定時(shí)器表示每隔一段時(shí)間就執(zhí)行一次,一般可執(zhí)行多次。
  • Timer定時(shí)器表示在一段時(shí)間后執(zhí)行,默認(rèn)情況下只執(zhí)行一次,如果想再次執(zhí)行的話,每次都需要調(diào)用Reset方法,此時(shí)效果類似Ticker定時(shí)器。同時(shí)也可以調(diào)用Stop方法取消定時(shí)器。

到此這篇關(guān)于Go語(yǔ)言定時(shí)器Timer和Ticker的使用與區(qū)別的文章就介紹到這了,更多相關(guān)Go語(yǔ)言定時(shí)器Timer和Ticker內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

最新評(píng)論