如果我们直接调用 Java 的 run() 方法而不是 start() 方法会怎么样?

2025年3月28日 | 阅读1分钟
  • 每个线程都在一个单独的调用堆栈中启动。
  • 从主线程调用 run() 方法时,run() 方法进入当前的调用堆栈,而不是进入一个新的调用堆栈的开始处。

文件名: TestCallRun1.java

输出

running...

MainThreadStack

如果直接调用 run() 方法会出现的问题

文件名: TestCallRun2.java

输出

1
2
3
4
1
2
3
4

正如我们在上面的程序中看到的,这里没有上下文切换,因为在这里 t1 和 t2 将被视为普通对象,而不是线程对象。