当前位置: 代码网 > it编程>前端脚本>Golang > Go语言定时器Timer和Ticker的使用与区别

Go语言定时器Timer和Ticker的使用与区别

2024年09月06日 Golang 我要评论
概述在日常开发中,我们不可避免的需要使用到定时任务用来处理业务逻辑。在go语言中内置的有两个定时器,timer和ticker,合理的使用这两个定时器可以很好的解决定时任务的需求,同时除了这两个内置的定

概述

在日常开发中,我们不可避免的需要使用到定时任务用来处理业务逻辑。在go语言中内置的有两个定时器,timer和ticker,合理的使用这两个定时器可以很好的解决定时任务的需求,同时除了这两个内置的定时器外,还有另外的三方库也可以用来完成定时任务的需求。

timer

简介

timer定时器可以在指定时间后执行一次,使用time包中的newtimer方法传入间隔时间参数即可创建一个timer定时器,定时器将会在指定的时间后执行一次。

timer中共有以下方法可调用

// 创建
func newtimer(d duration) *timer
// 重置
func (t *timer) reset(d duration) bool
// 停止
func (t *timer) stop() bool

在timer中除了有以上方法之外,还有最重要的就是timer中包含一个时间类型的通道c,当指定时间间隔到达后,就会将当前时间发送到通道c中,这样我们可以使用select监听通道c即可完成在指定时间后执行任务的需求。

基础用法

我们根据上面的描述,完成了下面的代码:

func main() {
    // 创建一个timer定时器
    timer := time.newtimer(time.second * 2)
    // 延迟关闭定时器
    defer timer.stop()
    fmt.println("当前时间:", time.now())
    select {
        // 使用select监听通道c
        case nowtime := <-timer.c:
        fmt.println("间隔2秒后指定定时任务,当前时间:", nowtime)
    }
}

在idea中运行代码后会输出以下内容:

当前时间: 2024-06-30 15:12:08.7736065 +0800 cst m=+0.002108801
间隔2秒后指定定时任务,当前时间: 2024-06-30 15:12:10.7797079 +0800 cst m=+2.008210201

process finished with the exit code 0

可以看到,timer定时器在指定时间后会执行一次任务,然后结束。

reset使用

在上面的代码中可以看到timer在指定时间后仅能执行一次任务,但是我们可以使用reset方法重置定时器,这样的话可以在每次执行任务后重置,用来达到每间隔指定时间都执行一次任务的需求。

将代码略做修改如下:

func main() {
    // 创建一个timer定时器
    timer := time.newtimer(time.second * 2)
    // 延迟关闭定时器
    defer timer.stop()
    fmt.println("当前时间:", time.now())
    for {
        timer.reset(time.second * 2)
        select {
        // 使用select监听通道c
        case nowtime := <-timer.c:
            fmt.println("间隔2秒后指定定时任务,当前时间:", nowtime)
        }
    }
}

在上面代码中可以看到在每次的循环中都重置一次timer定时器,这样的话就可以实现每隔一段时间都执行一次任务的需求。

最终运行结果如下:

当前时间: 2024-06-30 15:16:01.2907834 +0800 cst m=+0.002052801
间隔2秒后指定定时任务,当前时间: 2024-06-30 15:16:03.3096846 +0800 cst m=+2.020954001
间隔2秒后指定定时任务,当前时间: 2024-06-30 15:16:05.3236498 +0800 cst m=+4.034919201
间隔2秒后指定定时任务,当前时间: 2024-06-30 15:16:07.3318153 +0800 cst m=+6.043084701
间隔2秒后指定定时任务,当前时间: 2024-06-30 15:16:09.3462966 +0800 cst m=+8.057566001
间隔2秒后指定定时任务,当前时间: 2024-06-30 15:16:11.3504773 +0800 cst m=+10.061746701
……

ticker

简介

ticker定时器的用法和timer定时器的用法以及内置的方法都一样,区别在于ticker不仅仅只执行一次,而是会根据指定的时间间隔不停地执行。

基础用法

代码如下:

func main() {
    ticker := time.newticker(time.second * 2)
    defer ticker.stop()
    fmt.println("当前时间:", time.now())
    for {
        select {
        case nowtime := <-ticker.c:
            fmt.println("间隔2秒后指定定时任务,当前时间:", nowtime)
        }
    }
}

根据ticker写出以上代码,代码会每隔2秒执行一次,不需要像timer中那样每次使用reset方法来重置定时器,最终运行结果如下:

当前时间: 2024-06-30 15:20:27.4070592 +0800 cst m=+0.002137901
间隔2秒后指定定时任务,当前时间: 2024-06-30 15:20:29.4083801 +0800 cst m=+2.003458801
间隔2秒后指定定时任务,当前时间: 2024-06-30 15:20:31.414517 +0800 cst m=+4.009595701
间隔2秒后指定定时任务,当前时间: 2024-06-30 15:20:33.4191099 +0800 cst m=+6.014188601
间隔2秒后指定定时任务,当前时间: 2024-06-30 15:20:35.4099723 +0800 cst m=+8.005051001
间隔2秒后指定定时任务,当前时间: 2024-06-30 15:20:37.4208446 +0800 cst m=+10.015923301
……

在ticker定时器中同样也有reset方法,但是就算不调用reset方法定时器也会一直执行,所以这里的reset方法可以用来重置定时器的间隔时间。

区别

  • ticker定时器表示每隔一段时间就执行一次,一般可执行多次。
  • timer定时器表示在一段时间后执行,默认情况下只执行一次,如果想再次执行的话,每次都需要调用reset方法,此时效果类似ticker定时器。同时也可以调用stop方法取消定时器。

到此这篇关于go语言定时器timer和ticker的使用与区别的文章就介绍到这了,更多相关go语言定时器timer和ticker内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网! 

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com