Java 为什么这段代码为线程';什么是优先?
我有以下代码Java 为什么这段代码为线程';什么是优先?,java,android,multithreading,linux-kernel,android-threading,Java,Android,Multithreading,Linux Kernel,Android Threading,我有以下代码onCreate() 输出为: Setting priority background 1: 5 10 - myTid() 8798 Thread.getId() = 1 In new thread 7534: 10 -8 - myTid() 8819 Thread.getId() = 7534 有人能解释一下吗: 1) 即使我设置了setThreadPriority(Process.THREAD\u PRIORITY\u BACKGROUND)下一行中的日
onCreate()
输出为:
Setting priority background
1: 5
10 - myTid() 8798 Thread.getId() = 1
In new thread
7534: 10
-8 - myTid() 8819 Thread.getId() = 7534
有人能解释一下吗:1) 即使我设置了
setThreadPriority(Process.THREAD\u PRIORITY\u BACKGROUND)代码>下一行中的日志显示优先级5
。为什么?
2) 第二个线程优先级的输出中,-8
来自哪里?
3) 新线程的10
也来自哪里
更新:
如果我删除行Process.setThreadPriority(Process.THREAD\u PRIORITY\u BACKGROUND)代码>
输出保持相同的读数,线程优先级\u后台
将低于正常优先级的优先级委托给该线程上的任务
使用Thread.setPriority()
从获取信息时,包含从最小优先级(1)到最大优先级(10)的值,而Process.setThreadPriority()
支持从-20到19的值
下图显示了Android调度器和Linux调度器及其优先级。调用Process
和Thread
以获取线程优先级将返回两个不同的值,因为它们是两个不同的调度器,就像在日志中一样
更新:
波斯特对此提供了一些见解:
- Process.myTid()是linux线程ID
- getId()是一个简单的
顺序长数
getId()只是一个“java层”静态变量,每个线程都会自动递增
ThreadID不等于ProcessID
但是,将long转换为int并向进程提供ThreadID将返回一个expected值Process.getThreadPriority((int)Thread.currentThread().getId())
该映射没有解释值-8
来自何处,尽管我认为也符合该映射5 0
,但10的打印更新了一些信息。感谢更新,但我没有使用进程。getThreadPriority((int)Thread.currentThread().getId())
。这是如何调用的?我的意思是我没有在任何地方执行Process.getThreadPriority((int)Thread.currentThread().getId())
。为什么这会影响某些事情?
Setting priority background
1: 5
10 - myTid() 8798 Thread.getId() = 1
In new thread
7534: 10
-8 - myTid() 8819 Thread.getId() = 7534