2012-03-19 33 views
2

Thread.yield()靜態(爪哇)方法會導致當前執行的線程對象臨時暫停,並允許其他線程執行。Thread.yield()是一個超線程CPU

如果多個線程正在執行(在具有超線程功能的CPU中),哪個線程將暫停?

回答

6

調用Thread.yield的一個...

5

你似乎有一個關於HT誤解,HT是由硬件來處理,但需要一個線程被操作系統調度。如果一個線程產生CPU,它立即停止它的時間片,操作系統會在它的位置放置一個新的線程(或空閒進程)。另一個線程將繼續正常。

0

從Java的角度來看,超線程CPU上的線程是不是在不同內核上運行的線程有質的不同。 (他們只是更慢......)

但是,你可能誤解yield做什麼。它不保證暫停當前線程。相反,它只是線程調度程序現在運行不同線程的暗示。

  • 如果沒有其他可運行的線程,則調度程序將立即繼續,只是產生的線程。

  • 調度程序可能決定忽略該提示。

如果你想/需要當前線程真的暫停,通話sleep或阻塞等待某一事件的發生。