Go WaitGroup

学习go的时候,接触到了WaitGroup的一点知识,感觉跟Java的countDownLatch很像,略有体会,记录一下。

首先看一个简单的例子

package main

import (
	"fmt"
	"sync"
)

func main() {
	var wg sync.WaitGroup
	wg.Add(3)
	go func() {
		fmt.Println(1)
		wg.Done()
	}()
	go func() {
		fmt.Println(2)
		wg.Done()
	}()
	go func() {
		fmt.Println(3)
		wg.Done()
	}()
	wg.Wait()
}

很简单的一个例子,等待三个方法都执行完之后,main方法结束。看到这段代码,熟悉java的童鞋是不是觉得超级熟悉。没错,就是很像CountDownLatch的用法。但是CountDownLatch只能使用一次,不断的递减,但是WaitGroup可以实现Done()减少计数之后,再调用add()进行增加,重复使用,这其实更像Phaser的用法。这里也顺便记录一下同事在Phaser使用的时候遇到的坑,就是Phaser的所允许的最大值65535,超过这个值会出现问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值