2014-05-05 232 views
1

我有一套非平凡的方法,其中一個方法的結果最終會被請求。我想並行運行所有的方法,以便從任何一個選擇的答案立即可用。Java優先解決方法

我知道每種方法被選中的概率,所以我想將這些概率反映在方法並行運行的優先級中。

我使用的操作系統忽略了我給線程的優先級,那麼是否有一種解決方法來確保以最高概率運行該方法的線程將獲得更多的CPU資源?

回答

1

線程類具有setPriority方法。但是它可能不是很有幫助,因爲根據an article討論了Java中的線程優先級,並且在this answer中提到了什麼優先級真正意味着操作系統相關。尤其是,文章指出,

有優先級和CPU分配之間沒有關係本身

因爲每個操作系統都有其特殊性在線程調度。例如,爲了在Linux上工作的線程優先級,JVM應該以root身份運行,或者通過setuid設置root權限(根據同一篇文章)。

+0

該操作已經提到「*我使用的操作系統忽略了我給線程的優先級*」... – assylias

1

也許你可以忽略線程優先級,然後爲每個單獨的方法使用不同的ExecutorService-s /例如。資源消耗computation.For例如,您可以撥打

Executors.newFixedThreadPool(int) 

其中int wolud反映的方法的概率被稱爲(概率更大,更多的線程分配)。這當然意味着每一種方法的工作都應該同時進行。