2017-02-20 55 views
0

当我正在浏览andorid.os.HandlerThread类的源代码时,我发现Process.myTid()被用作线程ID。HandlerThread的线程ID - android

我搜查了一下,发现this有用的答案,现在我明白了什么是myTid,什么是myTiddifference之间& Thread.getId()

这是我的问题;

为什么我们需要从Process.myTid()获得ID?为什么不是使用Thread.getId()

@Override 
public void run() { 
    mTid = Process.myTid(); 
    Looper.prepare(); 
    synchronized (this) { 
     mLooper = Looper.myLooper(); 
     notifyAll(); 
    } 
    Process.setThreadPriority(mPriority); 
    onLooperPrepared(); 
    Looper.loop(); 
    mTid = -1; 
} 
+0

你想用ID做什么? – DanielLaneDC

+0

什么都没有。我只是想知道。 – mallaudin

+0

你想知道每个用途的一些用途吗? – DanielLaneDC

回答

0

你的所有Thread在一个Process运行(您的应用程序可能有超过1个过程)。每个线程都在默认池中运行。这意味着如果您创建自定义ThreadPool s您的线程ID可能相同,但它们属于不同池,但每个线程都在Process内部运行,因此每个线程都有自己的唯一ID。

Thread.getId()简单地说就是java静态自动增加每个线程的长度(这个线程的ID可能会被重用)。

Process.getTid()重新调整器Os.gettid()

+0

如果有两个进程并且Process.getTid()在进程中返回唯一的ID。没有任何**匹配ID的可能性**?为什么我需要关心**两个不同进程中的匹配线程ID **?我认为,每个进程中的线程都独立于其他进程运行。如果我们需要在进程之间共享数据,我们使用一些协议,但是*在另一个进程中关心线程根本没有意义*。纠正我,如果我错了。 – mallaudin

+0

您不需要关心其他进程中的线程,就如您所说每个进程与其他进程独立运行一样,所以您不必担心关心其他进程的线程\ –

+0

第一部分的情况如何? – mallaudin