package main

import (
"fmt"
"time"
) /*
·循环从一写两读三条管道中随机选择一条能走的路
·等所有路都走不通了就退出循环
*/ func main041() {
chA := make(chan int, 5) chB := make(chan int, 4)
chB <- 123
chB <- 123
chB <- 123
chB <- 123 chC := make(chan int, 3)
chC <- 123
chC <- 123
chC <- 123 go TaskA(chA)
go TaskB(chB)
go TaskC(chC) time.Sleep(10 * time.Second)
fmt.Println("main over")
} func main() {
chA := make(chan int, 5) chB := make(chan int, 4)
chB <- 123
chB <- 123
chB <- 123
chB <- 123 chC := make(chan int, 3)
chC <- 123
chC <- 123
chC <- 123 OUTER:
for true {
/*随机选择一条能走通的case
所有case都走不通时,走default
可以通过break跳出select,break XXX跳出指定标签*/
select {
case chA <- 123:
fmt.Println("执行任务A")
time.Sleep(time.Second)
case x := <-chB:
fmt.Println("执行任务B", x)
time.Sleep(time.Second)
case <-chC:
fmt.Println("执行任务C")
time.Sleep(time.Second)
default:
fmt.Println("全部任务已结束")
//break//跳出select
break OUTER
}
}
fmt.Println("main over") } func TaskA(ch chan int) {
for true {
fmt.Println("TaskA")
ch <- 123
time.Sleep(time.Second)
} }
func TaskB(ch chan int) {
for true {
fmt.Println("TaskB")
<-ch
time.Sleep(time.Second)
} }
func TaskC(ch chan int) {
for true {
fmt.Println("TaskC")
<-ch
time.Sleep(time.Second)
} }

  

最新文章

  1. ABP源码分析三十二:ABP.SignalR
  2. atexit函数
  3. firefox浏览器不能使用window.close的解决方案
  4. Eclipse首字母快捷设置
  5. ActiveMQ学习(二)——MQ的工作原理
  6. js获取随机色
  7. Matlab神经网络工具箱学习之二
  8. 引用外部CSS的link和import方式的分析与比较
  9. sql server中分布式查询随笔
  10. linuxserver启动过程
  11. Validate Model State automatically in ASP.NET Core 2.0
  12. 大白话5分钟带你走进人工智能-第十四节过拟合解决手段L1和L2正则
  13. Git命令使用小结
  14. nginx与php-fpm通信的两种方式
  15. 无脑博士的试管们--dfs搜素
  16. 【mysql】索引优化记录
  17. 记录.NET Core在CentOS上基于Jenkins自动化发布
  18. 2019 CCPC wannfly winter camp Day 8
  19. ORACLE设置密码无过期
  20. url-pattern / /*匹配

热门文章

  1. 1.4.17 base标签
  2. form表单验证提交
  3. hdu1435 稳定婚姻问题
  4. hdu5015 矩阵快速幂233(好题)
  5. hdu1255 扫描线,矩形重叠面积(两次以上)
  6. c/c++ 指针函数 和 函数指针
  7. Java并发容器篇
  8. Day003 运算符
  9. Mybatis-Plus01 快速开始
  10. JSON数据显示在jsp页面上中文乱码的解决办法