我确信MultiThreading
的基本术语对我来说很清楚 - 一个进程由多个线程组成,可以同时运行它们,对吗?
我遇到了site,声明:
一次只能运行一个线程。
线程调度程序主要使用抢占式或时间切片调度 安排线程。
所以写作时实际发生了什么:
public static void main (String [] args) {
new CalcThread("CalcThread A").start();
new CalcThread("CalcThread B").start();
}
假设线程调度程序选择thread a
先运行,让我们说thread b
将在它之后安排。 thread b
仅在thread a
终止后才会运行吗?
如果是这种情况 - 为什么称它为并发行为?
答案 0 :(得分:5)
调用start()
调度要执行的线程。虽然它通常“很快”执行,但实际执行开始时间是非决定性的;这取决于JVM。
在多核机器上,其他线程将(可能)在主线程继续的同时在其他核心上并发执行。
在单核机器(例如低规格AWS机器)上,JVM可以在继续主线程之前依次启动 - 处理 - 终止每个线程(我已经看到了这种情况)。
答案 1 :(得分:0)
这不一定是第一个正在运行的线程终止(完成所有工作),而是当它的时间量到期或者你在帖子中给出的其他因素时。
通过抢占式调度,可以停止正在运行的线程以支持更高优先级的线程,或者当新线程进入时,预期根据历史数据完成最短的时间。线程调度和用于执行此操作的算法可以考虑许多因素。
是的,它们同时运行,因为它们可以同时取得进展,但不能并行(实际上是在同一时间做同事)。