【Golang】goruntine 等待所有线程结束后执行

Go语言 小铁匠 2020-07-15

在使用 go 的 goroutine 时主线程不需要等待其它线程结束就可以继续执行后续操作,但有时有些业务逻辑的处理需要等待所有线程结束后才能执行,这个时候可以使用 sync.WaitGroup。

直接上代码:

import (
    "fmt"
    "sync"
)

var wg sync.WaitGroup
wg.Add(2)

go func(){
	time.Sleep(time.Duration(1) * time.Second)
	fmt.Println("test1")
	wg.Done() // wg.Add(-1)
}()

go func(){
	time.Sleep(time.Duration(3) * time.Second)
	fmt.Println("test2")
	wg.Done() // wg.Add(-1)
}()

wg.Wait()
fmt.Println("end.")
	

执行结果:

test1
test2
end.

如果不启用sync.WaitGroup执行结果会是:

end.
test1
test2

End.

------ 本文结束 感谢阅读 ------