您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何進行線程的講解,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
線程調度
在java技術中,線程通常是搶占式的而不需要時間片分配進程(分配給每個線程相等的cpu時間的進程)。一個經常犯的錯誤是認為“搶占”就是“分配時間片”。
在Solaris平臺上的運行環境中,相同優先級的線程不能相互搶占對方的cpu時間。但是,在使用時間片的windows平臺運行環境中,可以搶占相同甚至更高優先級的線程的cpu時間。搶占并不是絕對的,可是大多數的JVM的實現結果在行為上表現出了嚴格的搶占。縱觀JVM的實現,并沒有絕對的搶占或是時間片,而是依賴于編碼者對wait和sleep這兩個方法的使用。
搶占式調度模型就是許多線程屬于可以運行狀態(等待狀態),但實際上只有一個線程在運行。該線程一直運行到它終止進入可運行狀態(等待狀態)或是另一個具有更高優先級的線程變成可運行狀態。在后一種情況下,底優先級的線程被高優先級的線程搶占,高優先級的線程獲得運行的機會。
線程可以因為各種各樣的原因終止并進入可運行狀態(因為堵塞)。
例如,線程的代碼可以在適當時候執行Thread.sleep()方法,故意讓線程中止;線程可能為了訪問資源而不得不等待直到該資源可用為止。
所有可運行的線程根據優先級保持在不同的池中。一旦被堵塞的線程進入可運行狀態,它將會被放回適當的可運行池中。非空最高優先級的池中的線程將獲得cpu時間。
最后一個句子是不精確的,因為:
(1)在大多數的JVM實現中,雖然不能保證說優先級有任何意義,但優先級看起來象是用搶占方式工作。
(2)微軟windows的評價影響線程的行為,以至盡管一個處于可運行狀態的優先級為5的java線程正在等待cpu時間,但是一個優先級為4的java線程卻可能正在運行。
實際上,許多JVM用隊列來實現池,但沒有保證行為。
關于如何進行線程的講解就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。