多線程優先級

線程優先級被調度用來判定何時每個線程允許運行。理論上,優先級高的線程比優先級低的線程獲得更多的CPU時間。實際上,線程獲得的CPU時間通常由包括優先級在內的多個因素決定(例如,一個實行多任務處理的操作系統如何更有效的利用CPU時間)。一個優先級高的線程自然比優先級低的線程優先。舉例來說,當低優先級線程正在運行,而一個高優先級的線程被恢復(例如從沉睡中或等待I/O中),它將搶佔低優先級線程所使用的CPU。
    理論上,等優先級線程有同等的權利使用CPU。但java是被設計成能在很多環境下工作。一些環境下實現多任務處理從本質上與其他環境不同。爲安全起見,等優先級線程偶爾也受控制。這保證了所有線程在無優先級的操作系統下都有機會運行。實際上,在無優先級的環境下,多數線程任然有機會運行,因爲多線程不可避免的會遭遇阻塞,例如等待輸入輸出。遇到這種情形,阻塞的線程掛起,其他線程運行。但是如果你希望多線程執行的順利的話,最好不要採用這種方法。同樣,有些類型的任務是佔CPU的。
    設置線程的優先級,用setPriority()方法,該方法也是thread類成員。它的通常形式爲:
 final void setPrority(int level)
    這裏level指定了對所調用的線程的新的優先權的設置。level的值必須在MIN_PRIORITY到MAX_PRIORITY範圍內。通常,它們的值分別是1和10.要返回一個線程爲默認的優先級,指定NORM_PRIORITY,通常值爲5.這些優先級在Thread中都被定義爲final型變量。
    通過調用thread類的getPriority()方法可以獲得當前的優先級設置。方法如下:
 final int getPriority()
    當設計調度時,java的執行可以有本質上不同的行爲。windows的工作或多或少如你所願,但其他版本可能工作的完全不同。大多數矛盾發生在你使用優先級行爲的線程。而不是協同的騰出CPU時間,最安全的辦法是獲得可預見性的優先權,java獲得跨平臺的線程行爲的方法是自動放棄對CPU的控制。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章