在Go语言(不是Gosling Java,可能是你的笔误)中实现多线程,你可以使用goroutines和channels。goroutines是Go语言的并发原语,它们比传统的线程更轻量级,而且创建和切换的开销更小。channels则提供了一种在goroutines之间进行通信和同步的机制。
下面是一个简单的例子,展示了如何在Go语言中创建两个goroutines,并通过一个channel来传递数据:
package main
import (
"fmt"
"time"
)
func worker(id int, done chan bool) {
fmt.Printf("Worker %d starting\n", id)
time.Sleep(time.Second) // 模拟耗时操作
fmt.Printf("Worker %d done\n", id)
done <- true // 发送完成信号到channel
}
func main() {
done := make(chan bool, 10) // 创建一个带缓冲的channel
for i := 1; i <= 5; i++ {
go worker(i, done) // 启动5个goroutines
}
for i := 0; i < 5; i++ {
<-done // 等待每个goroutine完成
}
fmt.Println("All workers done!")
}
在这个例子中,我们定义了一个worker
函数,它接受一个整数id
和一个done
channel作为参数。worker
函数首先打印一条消息,然后模拟一个耗时操作(通过time.Sleep
函数),最后再打印一条消息并发送一个完成信号到done
channel。
在main
函数中,我们创建了一个带缓冲的done
channel,然后启动了5个goroutines,每个goroutine都调用worker
函数。接着,我们使用一个for循环来等待每个goroutine完成,每次迭代都从done
channel中接收一个值。当所有的goroutines都完成后,我们打印一条消息表示所有工作都完成了。
需要注意的是,由于goroutines是并发执行的,所以它们的执行顺序是不确定的。因此,在上面的例子中,你可能会看到不同的输出顺序,但每个goroutine最终都会完成并发送完成信号到done
channel。