# java创建多线程与go创建多线程的入门代码
以下是 Java 和 Go 创建多线程(Go 中称为 goroutine)的入门代码示例,两者都演示了启动多个并发任务并等待它们完成。
# Java(使用 Thread + join)
public class ThreadExample {
public static void main(String[] args) throws InterruptedException {
// 创建两个线程
Thread t1 = new Thread(() -> {
for (int i = 1; i <= 3; i++) {
System.out.println("Java 线程-1: " + i);
}
});
Thread t2 = new Thread(() -> {
for (int i = 1; i <= 3; i++) {
System.out.println("Java 线程-2: " + i);
}
});
t1.start(); // 启动线程1
t2.start(); // 启动线程2
t1.join(); // 等待线程1结束
t2.join(); // 等待线程2结束
System.out.println("所有线程执行完毕");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Go(使用 goroutine + sync.WaitGroup)
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
// 启动第一个 goroutine
wg.Add(1)
go func() {
defer wg.Done()
for i := 1; i <= 3; i++ {
fmt.Println("Go goroutine-1:", i)
}
}()
// 启动第二个 goroutine
wg.Add(1)
go func() {
defer wg.Done()
for i := 1; i <= 3; i++ {
fmt.Println("Go goroutine-2:", i)
}
}()
wg.Wait() // 等待所有 goroutine 完成
fmt.Println("所有 goroutine 执行完毕")
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 主要区别
| 特性 | Java (Thread) | Go (goroutine) |
|---|---|---|
| 创建方式 | 实现 Runnable 或继承 Thread | 使用 go 关键字 + 函数调用 |
| 栈内存起步 | 约 1 MB (可调) | 约 2 KB (动态增长) |
| 等待机制 | join() 方法 | sync.WaitGroup |
| 并发单位 | 操作系统线程 (较重) | 用户态协程 (极轻量) |
| 代码简洁度 | 较冗长 | 极简洁,符合语法自然 |
提示:Java 也可以使用 ExecutorService 来简化线程管理,但入门示例最经典的仍是 Thread + Runnable。Go 的 goroutine 则无需复杂封装,语言原生支持。