Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么这段代码为线程';什么是优先?_Java_Android_Multithreading_Linux Kernel_Android Threading - Fatal编程技术网

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