2012-03-19 34 views
2

Thread.yield()静态(爪哇)方法会导致当前执行的线程对象临时暂停,并允许其他线程执行。Thread.yield()是一个超线程CPU

如果多个线程正在执行(在具有超线程功能的CPU中),哪个线程将暂停?

回答

6

调用Thread.yield的一个...

5

你似乎有一个关于HT误解,HT是由硬件来处理,但需要一个线程被操作系统调度。如果一个线程产生CPU,它立即停止它的时间片,操作系统会在它的位置放置一个新的线程(或空闲进程)。另一个线程将继续正常。

0

从Java的角度来看,超线程CPU上的线程是不是在不同内核上运行的线程有质的不同。 (他们只是更慢......)

但是,你可能误解yield做什么。它不保证暂停当前线程。相反,它只是线程调度程序现在运行不同线程的暗示。

  • 如果没有其他可运行的线程,则调度程序将立即继续,只是产生的线程。

  • 调度程序可能决定忽略该提示。

如果你想/需要当前线程真的暂停,通话sleep或阻塞等待某一事件的发生。