簡體   English   中英

Java Thread:start() - 如何創建新線程?

[英]Java Thread: start() - How does it create a new thread?

我想知道java線程啟動方法內部能夠創建新線程的內容是什么?

它是一種本機方法,這意味着它不是用Java本身實現的,而是用C ++實現的。

在JVM簿記之外,它的確如何做,取決於JVM運行的平台; 在Linux上,它會運行像pthread_create() ,或者直接運行clone() 我不知道Windows的替代品是什么。

Java隱藏了你的底層機制有兩個主要原因:部分是為了讓你更容易編寫Java程序,而不必知道他們將運行的操作系統,作為抽象和服務給你; 但部分原因還在於能夠直接調用這些本機功能會破壞Java所強加的安全模型,因此在沒有顯式權限的情況下,確保沒有Java程序可以做任何事情。

最后,我不確定你問的確切原因,所以我不確定我是否真的在回答你的問題。

具體的答案是不可能的,因為它因平台而異(很久以前就有綠色線程,而且一切都很明確 - 它們作為用戶級線程運行 )。 從那時起,他們已被Native線程替換為“優化”。 也就是說,刪除了綠色線程以支持本機操作系統的慣用線程模型。 無論如何,本機代碼最終將調用您的編程run方法。

與Java中的任何其他內容非常相似,通過start()方法創建線程涉及JVM Java虛擬機通常所做的是充當方法調用和底層操作系統之間的中介 這確保了Java環境(大致)以相同的方式運行,而不管操作系統如何(=>着名的Java可移植性)。 但它在窗簾背后的作用(即在JVM的內部) 有所不同,取決於它運行的實際操作系統

例如,創建一個線程調用Unix OS上的pthread_create函數(POSIX線程調用),或Windows系統上的CreateThread函數(來自Win32 API)。 這是由Java虛擬機調用的,因此您不必這樣做。

這些功能只是一些例子。 取決於特定的JVM實現(對於不同的操作系統,請注意),start()方法可能會做其他魔術。

然而,原則保持不變。 在start()方法調用的東西 ,你的特定的操作系統本身支持創建線程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM