go语言多线程操作
在Go语言中,你可以使用goroutine
来实现并发操作。goroutine
是一种轻量级的线程,它可以在一个线程中并发地执行多个函数。
以下是一个简单的例子,展示了如何在Go语言中使用多线程。
解决方案1:使用go
关键字
package main
import (
"fmt"
"time"
)
func printNumbers() {
for i := 1; i <= 5; i++ {
fmt.Println(i)
time.Sleep(100 * time.Millisecond)
}
}
func printLetters() {
for i := 'a'; i <= 'e'; i++ {
fmt.Println(string(i))
time.Sleep(100 * time.Millisecond)
}
}
func main() {
go printNumbers() // 开启第一个goroutine
go printLetters() // 开启第二个goroutine
// 主线程等待其他goroutine完成
time.Sleep(1000 * time.Millisecond)
}
在这个例子中,printNumbers
和printLetters
两个函数在主线程结束后仍然在后台并发执行。
解决方案2:使用goroutine
与channel
进行同步
package main
import (
"fmt"
"time"
)
func printNumbers(done chan bool) {
for i := 1; i <= 5; i++ {
fmt.Println(i)
time.Sleep(100 * time.Millisecond)
}
// 通知main函数 goroutine已完成
done <- true
}
func printLetters(done chan bool) {
for i := 'a'; i <= 'e'; i++ {
fmt.Println(string(i))
time.Sleep(100 * time.Millisecond)
}
// 通知main函数 goroutine已完成
done <- true
}
func main() {
// 创建一个channel
done := make(chan bool)
go printNumbers(done) // 开启第一个goroutine
go printLetters(done) // 开启第二个goroutine
// 等待两个goroutine完成
<-done
<-done
}
在这个例子中,我们使用了一个channel
来同步两个goroutine
。当每一个goroutine
完成后,它会向channel
发送一个消息。在main
函数中,我们通过从channel
接收消息来等待所有goroutine
完成。
以上两种方式都可以实现Go语言中的多线程操作,你可以根据实际需求选择合适的方式。
评论已关闭