zoukankan      html  css  js  c++  java
  • 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)
    }
    

      

  • 相关阅读:
    synchronized使用及java中的原子性问题
    Volatile 原理及使用,java并发中的可见性问题
    final 修饰符
    java 常见OPTS参数的含义
    Redis面试题
    Count(1),Count(*),Count(column)区别
    Mysql索引创建及删除
    springboot 非端口模式启动
    sql批量插入缓慢
    sql server sql语句导入数据到execl2007中
  • 原文地址:https://www.cnblogs.com/yunweiqiang/p/12769918.html
Copyright © 2011-2022 走看看