温馨提示:本文翻译自stackoverflow.com,查看原文请点击:java - how does Thread.sleep(delay) react to actual parallel threads
java multithreading

java - Thread.sleep(delay)对实际的并行线程有何反应

发布于 2020-03-27 16:20:41

文档里说Thread.sleep导致当前线程在指定时间段内暂停执行。

术语“ 当前线程”是什么意思?我的意思是,如果处理器只有一个内核,则可以合理地将一个线程作为当前线程,但是如果所有线程(比如说其中的4个)都在单独的内核上运行,那么当前线程是哪个

查看更多

提问者
juztcode
被浏览
173
2,553 2020-02-19 13:07

您进行的每个命令和方法调用都必须由任何线程执行。从该线程的角度来看,它本身就是当前线程。因此,换句话说:Thread.sleep(delay)暂停执行该Thread.sleep()方法的线程

另外,请记住,多线程和多个内核之间只有非常遥远的关系。

甚至在多核CPU普及之前,几乎每个操作系统都支持繁重的多线程(或多任务处理,对于本次讨论的目的基本上是同一件事)操作。

在现代OS中,这是通过一种称为抢先式多任务处理的技术来完成的基本上,这意味着OS可以强制暂停当前正在运行的进程,并允许另一个进程在短时间内运行,从而提供了实际并行处理的错觉。

而且由于给定进程中通常会花费大量时间来等待一些外部I / O(网络,磁盘等),这甚至意味着您可以更有效地使用CPU(因为进程会花大量时间等待)在IO上,另一个进程可以花费进行实际计算)。

作为撰写本文时的示例,我的笔记本电脑只有13个线程(大多数线程可能正在休眠,实际上只有少数几个线程会运行和/或等待运行),尽管它只有4个内核。

tl; dr虽然多个内核允许多个线程在同一时间实际执行,但是即使只有一个内核,您也可以拥有多线程,并且这样做的差异很小(显然,除了原始性能之外)