go学习笔记4-go协程间的协作

 通过channel实现go协程间的协作,类似于java的wait和notify。协程1执行到i 等于10因为管道没数据被阻塞,协程2执行完写入数据到channel,协程1被唤醒继续执行。

一、代码

package main

import "fmt"
import "time"

func main() {
	ch := make(chan int)
	go func() {
		for i := 0; i < 20; i++ {
			if i == 10 {
				<-ch //读取ch的数据 会阻塞 相当于java的wait
			}
			fmt.Printf("task1 %d\n", i)
		}
	}()
	go func() {
		for i := 0; i < 20; i++ {
			fmt.Printf("task2 %d\n", i)
		}
		ch <- 1 //写入数据 唤醒协程1 相当于java的notify
	}()
	time.Sleep(time.Second)
}

二、运行结果

task2 0

task2 1

task2 2

task2 3

task2 4

task2 5

task2 6

task2 7

task2 8

task2 9

task2 10

task2 11

task2 12

task2 13

task2 14

task2 15

task2 16

task2 17

task2 18

task2 19

task1 0

task1 1

task1 2

task1 3

task1 4

task1 5

task1 6

task1 7

task1 8

task1 9

task1 10

task1 11

task1 12

task1 13

task1 14

task1 15

task1 16

task1 17

task1 18

task1 19

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值