Go并发控制之sync.WaitGroup

Go语言中可以使用sync.WaitGroup来实现并发任务的同步。 sync.WaitGroup有以下几个方法:

方法名 功能
(wg * WaitGroup) Add(delta int) 计数器+delta
(wg *WaitGroup) Done() 计数器-1
(wg *WaitGroup) Wait() 阻塞直到计数器变为0

sync.WaitGroup内部维护着一个计数器,计数器的值可以增加和减少。例如当我们启动了N 个并发任务时,就将计数器值增加N。每个任务完成时通过调用Done()方法将计数器减1。通过调用Wait()来等待并发任务执行完,当计数器值为0时,表示所有并发任务已经完成。

package main
import (
	"fmt"
	"sync"
	"time"
)
var wg sync.WaitGroup

func foo(){
	defer wg.Done()
	fmt.Println("foo")
	time.Sleep(time.Second*2)
    fmt.Println("foo end")

}

func bar(){
    defer wg.Done() 
	fmt.Println("bar")
	time.Sleep(time.Second*2)
    fmt.Println("bar end")
}

func main(){
	start:=time.Now()
	wg.Add(2) //括号里面的值为执行并发程序的个数
	go foo()
	go bar()
	wg.Wait() //通过调用Wait()来等待并发任务执行完,当计数器值为0时,表示所有并发任务已经完成。
	fmt.Println("程序结束,运行时间为",time.Now().Sub(start))
}

你可能感兴趣的:(go笔记,golang,java,jvm)