2014-05-05 148 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反映的方法的概率被称为(概率更大,更多的线程分配)。这当然意味着每一种方法的工作都应该同时进行。