在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。