本人新学Go语言,有个问题一直没找到相关资料,请高手帮忙解答以下。
在Java中,多个线程之间,只有保证了 先行性问题,才能保证不同线程的代码是按预期的先后顺序执行
以下是示例代码:
```go
package main
import (
"fmt"
)
func main() {
// 构建一个通道
ch := make(chan int)
// 开启一个并发匿名函数
go func() {
fmt.Println("start goroutine") //1
// 通过通道通知main的goroutine
ch <- 0
fmt.Println("exit goroutine") //2
}()
fmt.Println("wait goroutine") //3
// 等待匿名goroutine
<-ch
fmt.Println("all done") //4
}
```
输出结果: 执行了多次一直是这个结果,与java学到的线程相关知识不匹配。
``` go
wait goroutine
start goroutine
exit goroutine
all done
```
为什么 1和3 不是随机出现的, 2和4 不是随机出现的。 1和3 是2个不同goroutine,不是应该不能保证哪行代码先执行吗。
有疑问加站长微信联系(非本文作者)