3

知られているように

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)

どんなコメントでも大歓迎です。

更新しました:

答えはすべて正しいです。しかし、ファデンのコメントは私をより明確にします。皆さん、ありがとうございました。

4

2 に答える 2

0

Thread.getId():return id;

id が割り当てられている場所:

Thread.create:id = ++Thread.count

つまり、Process.myTid()'System tid' であり、Thread.getId()'Java thread id' です。

于 2013-11-11T03:32:08.050 に答える
0

Java 環境には 2 種類のスレッドがあると思います。

  • ネイティブ スレッド:ホストされている OS によって管理されます。
  • Java スレッド: JVM によって管理され、ネイティブ スレッドと通信します。
于 2013-11-11T03:33:13.963 に答える