java设置IO线程优先级_RxJava中工作线程的thread priority问题

发现RxJava中

Scedulers.io()

/

Schedulers.newthread()

等线程的thread priority是跟mainThread一样的,如何将其设置为

Process.THREAD_PRIORITY_BACKGROUND

在网上找了好久,发现jake大神提到过这个问题,并且为此向RxJava项目提交过一些代码,但是那是针对1.x的。

在2.x上,有一个issue提到过这个问题,项目的一位开发人员回复说2.x中是可以更改每个Scheduler的线程优先级的。经过一番查找,在

Schedulers

中找到了设置的方法,那就是通过

System.setProperty(String key, String value)

,其中

"rx2.io-priority"

是修改io线程优先级的key,但由于

Process.THREAD_PRIORITY_BACKGROUND

是android系统里的值,在java里,线程优先级取值范围是1-10,抱着试试看的态度,我设置了一下,发现果然不起作用:将

Process.THREAD_PRIORITY_BACKGROUND

设置上之后,通过

Process.getThreadPriority(Process.myTid())

拿到的值依然是0,即跟mainThread一样,于是,我来求救了。

此线程和彼线程不是一个概念

以下代码摘自:io.reactivex.internal.schedulers.IoScheduler.java

int priority = Math.max(1, Math.min(10, Integer.getInteger("rx2.io-priority", 5).intValue()));

WORKER_THREAD_FACTORY = new RxThreadFactory("RxCachedThreadScheduler", priority);

EVICTOR_THREAD_FACTORY = new RxThreadFactory("RxCachedWorkerPoolEvictor", priority);

印证了以上关于rx2.io-priority的说法

默认优先级是5,如果设置了参数rx2.io-priority,则以设置的为准

Pure Java的Thread Priority,应该是调用 Thread.currentThread().getPriority() 来获得

在Android 里,查看Process类的文档,有这么一句话

getThreadPriority(int tid)

Return the current priority of a thread, based on Linux priorities.

Java Thread 和 Linux Thread 看起来不是一回事

如果一定要使用Linux Thread的优先级

可以考虑自定义一个ThreadFactory,在里面调用Process.setThreadPriority。使用此ThreadFactory创建Executor,然后使用Schedulers.from(executor)来生成你自定义的一个Scheduler

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值