假设我在同一进程中运行了2个线程a和b。处理器从a运行一些指令,从b运行一些指令,直到达到如下代码行:Thread.sleep(1000)。
问题是我真的不明白处理器接下来会做什么。我怀疑这两个场景:
1)
2)
1000毫秒的间隔结束了:
如果proccessor仍然运行Thread b的代码
哪一个类似于幕后实际发生的事情? 如果两者都错了,请告诉我正确的答案。
答案 0 :(得分:4)
很多因素都会发挥作用,因此很难为你的问题提供绝对的答案。
但根据您提供的可用选项,#2 将是最接近的。
如果出现以下情况之一,则调用另一个线程来运行 事件发生:
....
更高优先级的线程比当前运行的线程进入 Runnable 状态。优先级较低的线程是 抢占并计划运行优先级较高的线程。
这是source。
答案 1 :(得分:3)
操作系统调度线程和进程,而不是处理器。它是如何做的取决于OS scheduler,它因操作系统而异。
即使JVM确实有线程调度程序the behavior ultimately does not depend on the JVM, but on the underlying OS scheduler。
有关2.6 Linux调度程序的工作原理,请参阅this。