首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Thread.setPriority()和android.os.Process.setThreadPriority()有什么区别

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

Stack Overflow用户
提问于 2011-03-05 03:48:38
回答 3查看 38.8K关注 0票数 74

如果我有像这样的代码:

代码语言:javascript
复制
Runnable r = ...;

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

或者..。

代码语言:javascript
复制
    Runnable r = ...
    Thread thread = new Thread( new Runnable() {
       public void run() {
         android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_MORE_FAVORABLE);
         r.run();
       }
    });

是否为 android.os.Process way required/首选?

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

据我所知,这并没有明确的文档记录。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-15 18:33:24

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

因此,目前Thread.setPriority实际上应该做与Process.setThreadPriority相同的事情,使用较小的Java优先级。优先级的映射在vm/Thread.ckNiceValues中定义

票数 38
EN

Stack Overflow用户

发布于 2014-08-11 13:22:50

谷歌使用

代码语言:javascript
复制
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);

在Volley的Network Dispatcher线程中,所以我相信使用Process.setThreadPriority()是可行的。

票数 8
EN

Stack Overflow用户

发布于 2011-04-15 09:08:50

我会依赖于thread.setPriority()android.os.Process.setThreadPriority指定了底层linux OS的实际线程优先级。但是,这些线程可以,但不需要映射到Dalvik / Java VM线程,因为VM可以使用自己的方式进行线程处理,也可以使用系统线程或两者的组合。如果不受android安全限制的限制,提高系统优先级更有可能导致您的应用程序优先于其他应用程序,但不能保证将当前的Java线程优先于应用程序中的其他Java线程。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5198518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档