背景:golang 有没有类似java Callable>FutureTask并行执行组件呢?当然有,话不多少上代码;
带返回值的例子:https://blog.youkuaiyun.com/m0_38093376/article/details/129177730
package main
import (
"fmt"
"sync"
"time"
)
// 创建一个sync.WaitGroup
var wg sync.WaitGroup
func main() {
now := time.Now()
//定义等待计数器减为3
wg.Add(3)
go Task1()
go Task2()
go Task3()
//等待队列阻塞,等待计数器减为0
wg.Wait()
fmt.Println("总耗时:", time.Since(now))
}
//
// Task1
// @Description: 任务1:休眠10秒
//
func Task1() {
now := time.Now()
// 每执行一次计数器就减一
defer wg.Done()
fmt.Println("开始执行任务1")
time.Sleep(time.Second * 10)
fmt.Println("完成执行任务1,耗时:", time.Since(now))
}
// Task2
// @Description: 任务2:休眠10秒
//
func Task2() {
now := time.Now()
// 每执行一次计数器就减一
defer wg.Done()
fmt.Println("开始执行任务2")
time.Sleep(time.Second * 5)
fmt.Println("完成执行任务2,耗时:", time.Since(now))
}
// Task3
// @Description: 任务3:休眠15秒
//
func Task3() {
now := time.Now()
// 每执行一次计数器就减一
defer wg.Done()
fmt.Println("开始执行任务3")
time.Sleep(time.Second * 15)
fmt.Println("完成执行任务3,耗时:", time.Since(now))
}
三个任务 如果串行执行时间是5+10+15=30秒,并行执行最终耗时15秒,见下图:
代码结束,欢迎来喷。