如何在go

时间:2018-08-01 20:53:16

标签: multithreading go routines

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

我想知道,如何将其转换为?

谢谢

1 个答案:

答案 0 :(得分:6)

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

您的特定示例似乎是sync.WaitGroup类型的常用用法:

/bin/sh -c 'echo "$(cut -d'=' -f2 <<< $(grep FOO .env))"'

请注意,示例中的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. 可以进行任何形式的工作,并将与所有其他调用同时执行;但是,如果它本身使用goroutines,则应确保使用此处所示的类似机制,以防止在实际完成工作之前从“ SomeFunction”返回。