例如方法public static void sleep(long millis)
。這種方法會導致當前線程進入休眠狀態,但它是如何知道的?哪個線程是最新的?靜態方法是獨立於對象的,屬於類,所以這個機制是如何工作的?java.lang.Thread靜態方法如何工作?
回答
此方法會導致當前線程進入休眠狀態,但它如何知道哪個線程是當前線程?
的電流線程由底層操作系統(或穿線系統)管理。底層(依賴於系統)線程執行提供了一個手柄到當前線程:
在POSIX線程情況下,存在該API調用pthread_self()它返回當前正在執行的線程的線程ID。你可以想象最終調用這個C函數的
Thread.currentThread()
並將線程ID包裝在Java對象中,然後返回。在MS窗口的情況下,存在API調用GetCurrentThread(),其返回當前正在執行的線程的Windows句柄。再次,您可以考慮最終調用此C函數並將句柄包裝在返回的Java
Thread
對象中。
native
方法是特殊的。他們可以訪問Java API之外的內容。
在這種情況下,向當前線程。你不能使用這個方法來讓另一個線程進入休眠狀態 - 另一個線程本身必須執行此操作(但顯然,你可以發送一條消息給它)。
每次有人對我說:「它超出了Java API,不要觸摸它」。謝謝,我忘了檢查Java源代碼。 – Lies 2013-02-19 08:47:09
它不超越Java API。它實際上**並未在Java **中實現,而是在骯髒,雜亂,高度優化的C代碼中實現。我並沒有試圖說「遠離這個」,但我試圖說「不要嘗試將Java規則應用於這種方法,它不是Java」。 – 2013-02-19 08:53:37
該方法總是針對當前執行的線程進行調用。
這意味着您當前的線程將進入睡眠模式一段非常短的時間。例如:如果我將寫入Thread.sleep(1000)線程將進入睡眠狀態1000毫秒。 我們主要使用這個小節來介紹這個線程之間的交換。總之,它會給另一個執行線程提供機會。
查看評論@Sudhanshu Umalkar回答 – Lies 2013-02-19 08:45:03
當前線程是實際執行該代碼段的線程。就如此容易。
例如:
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println("Before sleeping!");
Thread.sleep(10000);
System.out.println("After sleeping!");
}
}
Thread t1 = new Thread(r);
Thread t2 = new Thread(r);
System.out.println("Main thread!");
}
可輸出類似:
Before sleeping! // t1
Main thread! // main
Before sleeping! // t2
After sleeping! // t1
After sleeping! // t2
它是否提供了我的問題的答案? – Lies 2013-02-19 08:44:18
- 1. 靜態和非靜態方法工作
- 2. 靜態方法工作
- 3. django如何靜態工作
- 4. AutoMapper靜態工廠方法
- 5. 靜態工廠方法(Spring)
- 6. 靜態工廠方法
- 7. 靜態工廠方法
- 8. Autofac工廠靜態方法
- 9. 只有「靜態」的方法簽名是如何工作的?
- 10. 同步靜態方法在Java中如何工作?
- 11. 如何從靜態方法調用非靜態方法?
- 12. 如何在靜態方法中訪問靜態和非靜態方法
- 13. 靜態靜態方法?
- 14. 靜態工廠方法vs工廠
- 15. 靜態方法
- 16. 靜態方法
- 17. 靜態方法
- 18. 靜態方法
- 19. 靜態方法
- 20. 查看靜態方法中不工作的狀態
- 21. 使用枚舉作爲工廠vs靜態工廠方法
- 22. 如果add方法是靜態的,則不會得到答案,否則非靜態add方法正在工作
- 23. 無法在抽象類型中定義靜態方法。如何工作?
- 24. 爲什麼java.lang.Thread實現中的靜態嵌套類不可見?
- 25. 從靜態方法訪問非靜態成員的工作示例
- 26. Windows服務和線程工作代碼的靜態與非靜態方法
- 27. 已聲明靜態數組,但方法無法工作
- 28. addObserver:forKeyPath如何工作在靜態類上?
- 29. 靜態代碼分析如何工作
- 30. VB.NET靜態類如何工作?
@Downvoter,評論你的行動,請 – Lies 2013-02-19 11:57:38