Thread.setPriority()和android.os.Process.setThreadPriority()之间有什么区别

时间:2011-03-04 19:48:38

标签: android

如果我的代码如下:

Runnable r = ...;

Thread  thread = new Thread(r);
thread.setPriority((Thread.MAX_PRIORITY + Thread.NORM_PRIORITY) / 2);

或......

    Runnable r = ...
    Thread thread = new Thread( new Runnable() {
       public void run() {
         android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_MORE_FAVORABLE);
         r.run();
       }
    });

IS android.os.Process方式需要/首选吗?

为什么是首选/必需的android.os.Process方式?

据我所知,目前尚未明确记录。

3 个答案:

答案 0 :(得分:33)

当前的Dalvik实现似乎将Java Threads ony映射到底层的Linux系统PTHREAD,就像你说的那样。所有应用程序的所有线程都属于系统上的同一个线程组,因此每个线程都与所有应用程序的所有线程竞争。

因此,目前Thread.setPriority应该与Process.setThreadPriority实际相同,使用较小的Java优先级比例,优先级的映射在kNiceValues vm/Thread.c

答案 1 :(得分:6)

Google使用

Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);

在Volley的Network Dispatcher主题中,所以我相信使用Process.setThreadPriority()是可行的方法。

答案 2 :(得分:1)

我会依赖thread.setPriority()android.os.Process.setThreadPriority命名了底层Linux操作系统的真正线程优先级。但是,这些可以,但不需要映射到Dalvik / Java VM线程,因为VM可以通过自己的方式进行线程化或使用系统线程或两者的组合。提高系统优先级更有可能导致应用程序优先于其他应用程序(如果不受安全性约束限制),但不保证优先使用当前Java Thread支持应用程序中的其他Java Threads。