線程優先級
回答
-20(最高)至+20(最低),默認爲0。 但是,如果您不是root用戶,則不能將nice值增加負值。 (例如,通過-7遞增5的好值將被忽略,因爲您通常沒有獲得這樣的權限)。
EDIT看到https://stackoverflow.com/questions/128039/java-threads-priority-in-linux
我認爲你與混亂Linux的線程/進程優先級的可能重複Java線程優先。 Java允許您將Java線程優先級設置爲從MIN_PRIORITY到MAX_PRIORITY的任何值。這些值如何映射到本地線程優先級是......在這裏不相關。 – 2010-07-23 12:34:18
值從-20(最高)到19(最低) – xdevel2000 2010-07-23 13:04:17
@Stephen C在閱讀更多的答案和評論後,他確實*想知道這些值是如何映射的(這是JVM特有的)。 (不,我沒有混淆它 - Java *是獨立於平臺的,並且使用操作系統特定的參數是沒有意義的。) – Tedil 2010-07-23 14:12:32
在Java它是從Thread.MIN_PRIORITY到Thread.MAX_PRIORITY沒有定義的範圍的,因爲它依賴於底層操作系統和/或JVM上。
爲了提高性能,如果您在不同優先級的線程之間共享資源,可能會遇到優先級反轉問題。那就是當一個低優先級的線程持有一個具有高優先級線程的資源在等待它。那麼高優先級的線程可能會等待很長時間。
'MIN_PRIORITY'和'MAX_PRIORITY' [* do * have defined values](http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/constant-values.html#java.lang .Thread.MIN_PRIORITY)。他們分別是1和10。實現定義的事情是這些級別如何映射到實際的操作系統的prioerity水平! – 2010-07-23 13:07:43
@JoachimSauer鏈接已損壞。 – 2015-02-15 21:12:58
的Thread
類有兩個靜態int
字段:MIN_PRIORITY
和MAX_PRIORITY
,其實際值潛在的(如果不是實際上)平臺專用1
和10
。從理論上講,這些值在未來的Java發行版中可能會發生變化。但是,這是不太可能的,至少因爲這樣的改變會破壞二進制兼容性。 (原始常量的值可能會綁定到在編譯時使用它的代碼。)無論哪種方式,在(例如)setPriority
方法的規範中隱含MIN_PRIORITY的值將小於或等於MAX_PRIORITY的值。
編輯
啊...所以你真的想如何在Java優先值(例如Thread.MIN_PRIORITY
和Thread.MAX_PRIORITY
)映射到Linux原生線程的優先級知道:
再次,優先級映射可以是平臺/ JVM /版本特定的。 Sun不指定它們是什麼。
很難確定純Java應用程序中的優先級映射。
實驗上,您可以通過設置各種Java線程優先級並查看相應的Linux本機線程優先級來映射出映射。 (可能有某種方法可以讓
ps
命令打印出線程優先級。)或者,您可以下載並閱讀OpenJDK源代碼(用於您的版本/平臺)以查看Java運行時實際執行的操作。
編輯2
事實上,根據this page,Java優先級的天然線程的優先級的映射依賴於(並且可以使用顯式地設置)熱點-XX Java選項。 (搜索頁面的「優先級」。)
我的問題是關於當我使用MAX_PRIORITY設置setPriority時由JVM映射的Linux系統上的值! – xdevel2000 2010-07-23 12:24:01
@ xdevel2000 - 唯一100%可靠的答案是使用已安裝的JVM **打印出這些常量**的值,並且不要假設它們在另一個JVM上是相同的。 – 2010-07-23 12:28:37
@ xdevel2000:你的問題並沒有真正解釋你對從Java值到Linux內核值的映射感興趣。也許你應該通過更新你的問題來擴展它。 – 2010-07-23 13:10:08
您是否嘗試過使用常量從Thread.MIN_PRIORITY和Thread.MAX_PRIORITY來定義線程的優先級?
值得注意的是,線程優先級只是一個在Linux上被忽略的提示,除非你是root用戶,並且只能在Windows上降級。
總之,你不應該編寫你的程序來依賴線程優先級的行爲。無論你想要做什麼,最好以另一種方式完成。
使用setPriority,優先級級別從1(最不重要)到10(最重要)的範圍,如果沒有明確設置級別,默認情況下優先級爲5。
還要檢查常量MAX_PRIORITY和MIN_PRIORITY
- 1. 流程優先與線程優先級
- 2. 更改線程優先級
- 3. Android的線程優先級
- 4. 線程內線程的優先級
- 5. 通過了解線程的優先級來設置線程的優先級
- 6. 是nice()用來改變線程優先級還是進程優先級?
- 7. 更改線程優先級ERROR_INVALID_HANDLE
- 8. C++線程網絡優先級
- 9. .NET Backgroundworker對象的線程優先級
- 10. 線程,優先級和放棄
- 11. 線程消息之間的優先級?
- 12. 設置CoreData NSManagedObjectContext線程優先級
- 13. 並行線程與實時優先級
- 14. 降低Task.Factory.StartNew線程的優先級
- 15. NSOperationQueue VS並行線程的優先級
- 16. Java中的高優先級線程
- 17. Windows和Linux線程優先級等價
- 18. Iphone線程優先
- 19. 優先級隊列中的優先級
- 20. 爲什麼新線程中getPriority的優先級與調用線程中的優先級不同?
- 21. 什麼是UI線程的線程優先級?
- 22. 一個簡單的線程在碳庫++與線程優先級
- 23. 線程池中的C#低線程優先級
- 24. 聚合線程和線程優先級(java)
- 25. 線程運行後快速更改線程qualityOfService /優先級
- 26. 優先上傳優先級,以高優先級使用HTB qdiscs
- 27. 應用程序優先級
- 28. 變化進程優先級
- 29. 線程優先與posix
- 30. C#:BackgroundWorker線程優先
[在Linux中的Java線程的優先級(http://stackoverflow.com/questions/128039) – krock 2010-07-23 12:18:32