【Go】并发编程之 计时器


一、Timer:时间到了,执行只执行1次

package main

import (
	"fmt"
	"time"
)

func main() {
	// 1.timer基本使用
	//timer1 := time.NewTimer(2 * time.Second)
	//t1 := time.Now()
	//fmt.Printf("t1:%v\n", t1)
	//t2 := <-timer1.C
	//fmt.Printf("t2:%v\n", t2)

	// 2.验证timer只能响应1次
	//timer2 := time.NewTimer(time.Second)
	//for {
	//	<-timer2.C
	//	fmt.Println("时间到")
	//}

	// 3.timer实现延时的功能
	//(1)
	//time.Sleep(time.Second)
	//(2)
	//timer3 := time.NewTimer(2 * time.Second)
	//<-timer3.C
	//fmt.Println("2秒到")
	//(3)time.After 在等待给定的一段时间后,向返回值发送当前时间,返回值是一个单向只读通道
	//<-time.After(2 * time.Second)
	//fmt.Println("2秒到")

	// 4.停止定时器
	//timer4 := time.NewTimer(2 * time.Second)
	//go func() {
	//	<-timer4.C
	//	fmt.Println("定时器执行了")
	//}()
	//b := timer4.Stop()
	//if b {
	//	fmt.Println("timer4已经关闭")
	//}

	// 5.重置定时器
	timer5 := time.NewTimer(3 * time.Second)
	timer5.Reset(1 * time.Second) //将定时器重新设置为1秒
	fmt.Println(time.Now())
	fmt.Println(<-timer5.C)

}

二、Ticker:时间到了,多次执行

package main

import (
	"fmt"
	"time"
)

func main() {
	// 1.获取ticker对象
	ticker := time.NewTicker(1 * time.Second)
	i := 0
	// 子协程
	go func() {
		for {
			//<-ticker.C
			i++
			fmt.Println(<-ticker.C)
			if i == 5 {
				//停止
				ticker.Stop()
			}
		}
	}()
	time.Sleep(10 * time.Second)
}

输出结果:

2022-02-22 17:17:33.1346632 +0800 CST m=+1.009802301
2022-02-22 17:17:34.1436537 +0800 CST m=+2.018792801
2022-02-22 17:17:35.1317749 +0800 CST m=+3.006914001
2022-02-22 17:17:36.1357066 +0800 CST m=+4.010845701
2022-02-22 17:17:37.1387211 +0800 CST m=+5.013860201

关于定时器的更多内容,请参见我的另一篇文章:【Go】time 包 的第五节


参考链接

  1. 定时器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值