根据我读过的定义:
threads are basically pieces of code that are running concurrently (at the same time).
但是,它们如何在线程调度程序存在的情况下同时运行呢?
我读到,线程调度程序基本上是从Runnable
线程池中随机选择一个线程在某个时刻运行。由此我得知,在一个精确的时间点,只有一个可运行线程真正处于运行状态(正在运行)。 (所有这些都来自 SCJP Sun 认证程序员学习指南)任何人都可以澄清这一点吗?
这些线程真的并发运行吗?
最佳答案
However how can they be running concurrently with the existence of a thread scheduler?
它们并不总是并发运行,调度程序的工作是交换正在运行的线程,以便它们看起来是并发运行的。也就是说,速度太快,你看不到。
调度程序使用 0.1 毫秒的时间片。您只能看到 10 - 25 毫秒的闪烁,所以这对于您来说太快了,但它正在快速交换线程,因此看起来存在并发。
例如你不会看到电影从一帧跳到下一帧。每帧每 1/42 秒更改一次,因此您认为看到了运动,但实际上对于高速摄像机,屏幕看起来会跳动。
如果您有一个逻辑 CPU,则所有线程都将交换到一个 CPU。如果您有多个逻辑 CPU,则一小部分可以同时运行,其余的必须等待。
关于java - 当有线程调度程序时,执行线程如何并发运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24646417/