学习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,超过这个值会出现问题。