2015-05-04 34 views
2

Thread.currentThread()可以用來獲取當前正在執行的線程。而且我認爲睡眠和收益方法都是靜態的,因爲它們不能在其他線程上執行睡眠或收益。所以通過將它們設置爲靜態,它會睡眠或只產生當前正在執行的線程。如果有多個處理器,Thread.currentThread()如何工作?

這似乎是在單處理器系統,如果我打電話Thread.currentThread()或睡眠,那麼只有當前正在運行的線程,它會返回或它會睡覺。但在多核系統中,多個線程可以同時運行,因此Thread.currentThread()Thread.sleep()如何工作......?

+3

這完全是操作系統特定的;這是JVM在這裏使角色準確工作的角色。 – fge

+2

只是爲了澄清已經給出的答案:_current_並不意味着_當前正在執行_。它意味着你正在調用靜態方法的線程。 –

+1

這個名字是古代遺留下來的,當時只有一個CPU。那時,調用方法的線程確實是當前線程。 –

回答

5

方法Thread.currentThread()返回我們當前正在運行的線程。這只是一種說法:「嘿給我一個線程運行的參考」

假設我們有四個內核和四個線程A,B,C和D是絕對併發運行的,同時,它將根據我們當前所在的線程,適當地返回A,B,C和D.

1

它只適用於「當前」線程。在多核系統中,如果你的代碼是單線程的,那麼只有一個線程正在運行,這是當前的線程,所以這個代碼將在那個線程上工作。如果你有多線程程序,這個代碼將在它被調用的線程中工作。內核的數量並不重要。 Java將線程和負載分配給不同的內核,但從代碼的角度來看,處理器的數量並不重要。

3

這些方法是靜態的,因爲您可以訪問正在執行該代碼的核心/ CPU的當前執行線程

如果有多個核心或CPU處理器,則通過此代碼的每個核心都會返回給您自己的線程。因此,您不需要關心繫統中有多少個核心/ CPU,這些方法可以在兩種情況下在單個核心和多核系統中工作。

請記住,Java Thread是OS真實線程(posix,windows ...)的抽象,因此您可以編寫您的程序而不必關心操作系統體系結構。

4

在這種情況下,文檔非常差。 Thread.currentThread()返回的內容實際上是執行該代碼行的線程。因此,無論您是處於多處理器環境還是不在這種情況下都無關緊要。

當您有兩個線程ThreadAThreadB完全並行運行並且您同時請求Thread.currentThread()時,您將獲得執行此操作的相應線程。

相關問題