Java与Go:并发
在Java中,我们可以使用ExecutorService
来实现并发任务,而在Go中,我们可以使用goroutines和channels来实现并发。
以下是两种语言的简单示例:
Java:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ConcurrentExample {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(4);
for (int i = 0; i < 10; i++) {
final int taskId = i;
executorService.submit(new Runnable() {
public void run() {
System.out.println("Executing task ID " + taskId);
try {
Thread.sleep(2000); // 模拟长时间运行的任务
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
executorService.shutdown(); // 关闭ExecutorService
}
}
Go:
package main
import (
"fmt"
"sync"
"time"
)
func main() {
var wg sync.WaitGroup
for i := 0; i < 10; i++ {
wg.Add(1)
go func(taskId int) {
defer wg.Done()
fmt.Printf("Executing task ID %d\n", taskId)
time.Sleep(2 * time.Second) // 模拟长时间运行的任务
}(i)
}
wg.Wait() // 等待所有goroutines完成
}
在这两个示例中,我们都创建了多任务执行环境,并提交了多个任务。在Java中,我们使用ExecutorService
并通过submit
方法提交任务,在Go中,我们使用go
关键字启动新的goroutine。两者都使用WaitGroup
来确保主程序等待所有任务完成。
评论已关闭