如何在go中转换以下Thread语句
How to convert the following Thread statement in go
我正在尝试在 go 中转换以下 java 线程语句;
int num = 5;
Thread[] threads = new Thread[5];
for (int i = 0; i < num; i++)
{
threads[i] = new Thread(new NewClass(i));
threads[i].start();
}
for (int i = 0; i < numT; i++)
threads[i].join();
我想知道,这个怎么转换成go?
谢谢
Golang 使用一个名为 "goroutines" (inspired by "coroutines") 的概念,而不是许多其他语言使用的 "threads"。
您的具体示例看起来像是 sync.WaitGroup
类型的常见用法:
wg := sync.WaitGroup{}
for i := 0; i < 5; i++ {
wg.Add(1) // Increment the number of routines to wait for.
go func(x int) { // Start an anonymous function as a goroutine.
defer wg.Done() // Mark this routine as complete when the function returns.
SomeFunction(x)
}(i) // Avoid capturing "i".
}
wg.Wait() // Wait for all routines to complete.
请注意,示例中的 SomeFunction(...)
可以是任何类型的工作,并将与所有其他调用同时执行;但是,如果它本身使用 goroutines,那么它应该确保使用此处所示的类似机制来防止从 "SomeFunction" 返回,直到它实际完成其工作。
我正在尝试在 go 中转换以下 java 线程语句;
int num = 5;
Thread[] threads = new Thread[5];
for (int i = 0; i < num; i++)
{
threads[i] = new Thread(new NewClass(i));
threads[i].start();
}
for (int i = 0; i < numT; i++)
threads[i].join();
我想知道,这个怎么转换成go?
谢谢
Golang 使用一个名为 "goroutines" (inspired by "coroutines") 的概念,而不是许多其他语言使用的 "threads"。
您的具体示例看起来像是 sync.WaitGroup
类型的常见用法:
wg := sync.WaitGroup{}
for i := 0; i < 5; i++ {
wg.Add(1) // Increment the number of routines to wait for.
go func(x int) { // Start an anonymous function as a goroutine.
defer wg.Done() // Mark this routine as complete when the function returns.
SomeFunction(x)
}(i) // Avoid capturing "i".
}
wg.Wait() // Wait for all routines to complete.
请注意,示例中的 SomeFunction(...)
可以是任何类型的工作,并将与所有其他调用同时执行;但是,如果它本身使用 goroutines,那么它应该确保使用此处所示的类似机制来防止从 "SomeFunction" 返回,直到它实际完成其工作。