-1

我正在尝试在 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();

我想知道,如何转换这个去?

谢谢

4

1 回答 1

6

Golang 使用一个称为“goroutines”的概念(受“coroutines”的启发)而不是许多其他语言使用的“线程”。

您的具体示例看起来像是该类型的常见用途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”返回,直到它实际完成其工作。

于 2018-08-01T21:02:39.700 回答