Android:Process.myTid()与Thread.currentThread().getId()的比较
我有一个简单的Android:Process.myTid()与Thread.currentThread().getId()的比较,android,android-asynctask,Android,Android Asynctask,我有一个简单的活动调用异步任务,所以我打印了一些关于过程和线程的id: From onCreate android.os.Process.myUid(): 10137 From onCreate android.os.Process.myPid(): 29776 From onCreate android.os.Process.myTid(): 29776 From onCreate Thread.currentThread().getId(): 1 /*********************
活动
调用异步任务
,所以我打印了一些关于过程
和线程
的id:
From onCreate android.os.Process.myUid(): 10137
From onCreate android.os.Process.myPid(): 29776
From onCreate android.os.Process.myTid(): 29776
From onCreate Thread.currentThread().getId(): 1
/****************************************************************/
From Async doInBackground android.os.Process.myUid(): 10137
From Async doInBackground android.os.Process.myPid(): 29776
From Async doInBackground android.os.Process.myTid(): 30426
From Async doInBackground Thread.currentThread().getId(): 12556
Uid
是相同的,因为它的Pid
类似:过程
onCreate
中的第三行与Pid
相同,因为它是UIThread
,在基于Linux的Android操作系统中,我们知道关于进程的问题实际上是线程
等等。。。在Async
中,ThreadId
是不同的,因为AsyncTask
运行在不同的Thread
上,而不是UIThread
Thread.currentThread().getId()
。我希望在相同的执行环境中获得与Thread.currentThread().getId()相同的id。e、 g.对于onCreate
我希望第3,4行相同(29776),对于Async
我希望第3,4行相同(30426)。这是怎么回事
谢谢,OP提出了一个非常有趣的问题,我决定去挖掘(热爱开源)
简单的回答是:它们之所以不同,是因为它们不同,因为它们本来就不应该是一样的
Process.myTid()
是linux线程ID
Thread.getId()
是一个简单的顺序long
number
但是简短的答案很无聊,所以让我们来探索答案的来源(答案中的链接指向相关的源代码)
在中,您将看到,这只是从其本身调用本机方法,因为该方法如下所示:
public static int gettid() { return Libcore.os.gettid(); }
此外,Os.gettid()的文档代码>您将找到指向的链接
gettid()返回调用方的线程ID(TID)。在单线程中
进程,线程ID等于返回的进程ID(PID
通过getpid(2))。在多线程进程中,所有线程具有相同的
PID,但每个都有一个唯一的TID
- 这意味着,
Process.myTid()
返回Linux内核给定的线程ID
另一方面,它只是返回一个long
。在init(…)
as期间分配这一长度。那么这个谜题的最后一块,下面是
- 这意味着,
Thread.getId()
只是一个“java层”静态变量,每个线程都会自动递增
您从哪个AsyncTask
方法记录ID?@OnikonCreate
(活动)正在调用常规newsometask().execute()代码>这是常规的AndroidAsyncTask
当然!你有记录身份证吗?如果是这样,我知道您记录的方法之一是Activity
的onCreate()
。另一个是什么(在AsyncTask
中)?@Onik我想我明白了Log.e(“Tag”,getId…)
内部doInBackground
使用Log
是根源吗?
/* For generating thread ID */
private static long threadSeqNumber;
private static synchronized long More ...nextThreadID() {
return ++threadSeqNumber;
}