知られているように
myTid() -
setThreadPriority(int, int) で使用される呼び出しスレッドの識別子を返します。
Thread.currentThread().getId()
しかし、が と等しくないことがわかりましたProcess.myTid()
。したがって、前者は JVM 版のスレッド ID であり、後者は Linux 版のスレッド ID であると思います。
私は正しいですか?もしそうなら、なぜ Java は独自のスレッド ID を作成し、Linux スレッド ID を使用しないのですか?
アップデート:
Androidのソースコードをさらに調査して読んだ後、私は新しい認識を得ました:
Process.myTid()
プラットフォーム(OS)関連の操作でありProcess.setThreadPriority()
、Androidのネイティブレベルソースでは、それらはすべてシステムコールを呼び出してターゲットを実現します。
しかし、Java はプラットフォームに依存しない言語です。Java はホスト OS に「tid」またはgetTid()
メソッドを強制しません。別の OS がそのスレッドを文字列キーで識別する可能性があるためです (ほんの一例です:))。次に、Java は独自の方法でスレッドを識別し、Java スコープで一意のスレッド ID を割り当てます。Java が のような静的 API を提供する場合Process.setThreadPriority()
、Java スコープ ID は間違いなく 1 つのパラメーターになりますが、呼び出しでこれを行うことができるため、その必要はありません。 Thread オブジェクトのメソッドsetPriority(int priority)
。
どんなコメントでも大歓迎です。
更新しました:
答えはすべて正しいです。しかし、ファデンのコメントは私をより明確にします。皆さん、ありがとうございました。