原创

Go中的WaitGroup(类似于Java中的CountDownLatch)

现在让我们看一个需求,比如我们开启三个并发任务,然后三个并发任务执行处理完毕后我们才让主线程继续往下面走。
这时候肯定不能用睡眠了,因为不知道睡眠多长时间。
这是Go中的sync包提供了一个WaitGroup的工具,他基本上和Java中的CountDownLatch的功能一致。

接下来让我们看代码示例:

<font face="仿宋" size="3">package main
import (
"fmt"
"sync"
"time"
)

//获取类似于CountDownLatch的对象
var wait sync.WaitGroup

func main() {
//设置计数器任务为3,当3个任务全部done后,wait.Wait()才会松开阻塞
wait.Add(3)
go myFun1()
go myFun2()
go myFun3()
//阻塞
wait.Wait()
}

func myFun1() {
//计数器减1
defer wait.Done()
//睡眠五秒
time.Sleep(time.Second*5)
fmt.Println("fun1执行完毕")
}

func myFun2() {
//计数器减1
defer wait.Done()
//睡眠五秒
time.Sleep(time.Second*5)
fmt.Println("fun2执行完毕")
}

func myFun3() {
//计数器减1
defer wait.Done()
//睡眠五秒
time.Sleep(time.Second*5)
fmt.Println("fun3执行完毕")
}</font>

本文链接地址:http://www.ysxbohui.com/article/210

正文到此结束