Go语言协程并发---timer秒表与定时器
秒表
package main import (
"fmt"
"time"
) /*每秒大喊我要去浪,共9次,然后退出计时*/ func main() {
var tickerStopped = false
ticker := time.NewTicker(time.Second)
go func() {
time.Sleep(9 * time.Second)
ticker.Stop()
tickerStopped = true
}()
for {
if tickerStopped {
break
} //每次阻塞1秒
<-ticker.C
fmt.Println("我要去浪")
} fmt.Println("main over")
}
定时器
package main import (
"fmt"
"os"
"time"
) /*三秒后宣布*/
func main051() {
timer := time.NewTimer(3 * time.Second)
fmt.Println("计时开始", time.Now())
x := <- timer.C //时间管道
fmt.Println("引爆于", x) fmt.Println("罗志祥的时间管理")
} /*简易实现方式*/
func main052() {
fmt.Println("计时开始", time.Now())
x:=<-time.After(3*time.Second)
fmt.Println("引爆于", x)
fmt.Println("罗志祥的时间管理")
} /*定时器的终止*/
func main053() {
timer := time.NewTimer(5 * time.Second)
fmt.Println("计时开始",time.Now())
go func() {
time.Sleep(3*time.Second)
//停止计时器(永远不会向timer.C中写入数据了)
ok := timer.Stop()
if ok{
fmt.Println("炸弹已拆除")
os.Exit(0)
}
}() //阻塞5秒
endTime := <-timer.C
fmt.Println("炸弹引爆于", endTime)
} /*定时器重置*/
func main054() {
timer := time.NewTimer(5 * time.Second)
fmt.Println("计时开始",time.Now()) time.Sleep(time.Second)
//以当前时间为基准(而不是timer被创建的时间),将定时器设置为2秒
timer.Reset(2*time.Second) //阻塞5秒
endTime := <-timer.C
fmt.Println("炸弹引爆于", endTime)
} /*爆炸后重置定时器*/
func main() {
timer := time.NewTimer(3 * time.Second)
fmt.Println("计时开始",time.Now()) //睡眠期间,timer.C已经被写入时间
time.Sleep(5*time.Second)
//以当前时间为基准(而不是timer被创建的时间),将定时器设置为2秒
timer.Reset(2*time.Second) //阻塞5秒
endTime := <-timer.C
fmt.Println("炸弹引爆于", endTime)
}
Go语言协程并发---timer秒表与定时器的更多相关文章
- Go语言协程并发---管道信号量应用
package main import ( "fmt" "math" "strconv" "time" ) /* ·10 ...
- Go语言协程并发---互斥锁sync.Mutex
package main import ( "fmt" "sync" "time" ) /* mt.Lock() 抢锁 一次只能被一个协程锁 ...
- Go语言协程并发---等待组sync.WaitGroup
package main import ( "fmt" "sync" "time" ) /*等待组API介绍*/ func main071( ...
- Go语言协程并发---条件变量
package main import ( "fmt" "sync" "time" ) func main() { //要监听的变量 bit ...
- Go语言协程并发---读写锁sync.RWMutex
package main import ( "fmt" "sync" "time" ) /* 读写锁 多路只读 一路只写 读写互斥 */ / ...
- Go语言协程并发---生产者消费者实例
package main import ( "fmt" "strconv" "time" ) /* 改进生产者消费者模型 ·生产者每秒生产一 ...
- Go语言协程并发---原子操作
package main import ( "fmt" "sync/atomic" ) /* 用原子来替换锁,其主要原因是: 原子操作由底层硬件支持,而锁则由操 ...
- Go语言协程并发---select多路复用应用
package main import ( "fmt" "time" ) /* ·循环从一写两读三条管道中随机选择一条能走的路 ·等所有路都走不通了就退出循环 ...
- python3通过gevent.pool限制协程并发数量
协程虽然是轻量级的线程,但到达一定数量后,仍然会造成服务器崩溃出错.最好的方法通过限制协程并发数量来解决此类问题. server代码: #!/usr/bin/env python # -*- codi ...
随机推荐
- C#开发医学影像胶片打印系统(一):万能花式布局的实现思路
本篇文章将介绍开发医学影像胶片打印系统(printscu模式)遇到不规则排版时的一种思路, 一般来讲,医院打印胶片时都是整张胶片打印,但有时需要将多个病人或一个病人的多个检查打印在同一张胶片上, 这时 ...
- Oralce注入 bypass waf出数据
发存货: 探测banner 版本号: ' and (SELECT banner FROM v$version where rownum=1) like 'O%' and '1'like'1 rownu ...
- jQuery监控键盘事件
<!doctype html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- 【ShardingSphere】ShardingSphere学习(一)
参考官方文档:http://shardingsphere.apache.org/ ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC.Sha ...
- vim 中文乱码解决
问题如下: 在vim中编辑一个中文文本时 出现中文乱码情况 问题解决: 修改vimrc的脚本配置 编辑~/.vimrc文件,加上如下几行即可: set fileencodings=utf-8,ucs- ...
- Mysql 8.0安装
1. 下载安装包至/usr/local目录下 下载地址:https://cdn.mysql.com/Downloads/MySQL-8.0/mysql-8.0.16-el7-x86_64.tar.gz ...
- Python小游戏 -- 猜数字
Python初学者小游戏:猜数字 游戏逻辑:电脑随机生成一个数字,然后玩家猜数字,电脑提示猜的数字大了还是小了,供玩家缩小数字范围,达到既定次数后,玩家失败.若在次数内猜对,玩家获胜. 涉及知识点:r ...
- mimikatz的使用
mimikatz mimikatz是法国人Gentil Kiwi编写的一款Windows平台下的神器,它具备很多功能,其中最主要的功能是直接从 lsass.exe 进程里获取处于active状态账号的 ...
- Portswigger web security academy:Cross-site request forgery (CSRF)
Portswigger web security academy:Cross-site request forgery (CSRF) 目录 Portswigger web security acade ...
- XCTF-unfinish
unfinish 之前做过这个题,这是之前写的WP:链接