2017-02-20 17 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