質問

複数のJavaアプリケーションがシステム上で実行されている場合は、

にかかわらず、それらが実行されているどのようなアプリケーションの、他のすべてのJavaスレッドの各スレッドID独特の相対的なのですか?

私はスレッドIDが衝突することは可能かもしれないと思ったので、

Javaアプリケーションは、他のJavaアプリケーションへの砂箱入り相対することになっている。

スレッドIDは、すべてのアプリケーション間で一意である場合、それはシステム上の他のアプリケーションに関するいくつかの(ただし、非常にマイナーな)情報を漏洩しないのだろうか?このようなどのように多くのスレッドが他のアプリケーションで開始している、またはその他のJavaアプリケーションがまったく実行されている場合でも?

など
役に立ちましたか?

解決

まあ、私はソースをチェックしてみましょう。

(すべてのコンストラクタによって呼び出される)Threadinit方法において:

/* Set thread ID */
tid = nextThreadID();

nextThreadID()でます:

private static synchronized long nextThreadID() {
    return ++threadSeqNumber;
}

/* For generating thread ID */
private static long threadSeqNumber;

これは、0にこのようにデフォルト値を設定していない、と決してされます。

だから、明らかにいつもつまり1で0と増分で開始するID番号をスレッド

、あなたの質問への答えは、彼らがのないのグローバルに一意であるということです。

他のヒント

JDKのソースによると、スレッドIDが指定されたJVM内で一意である - 。実際には、それは単に、実行中のシーケンスとして実装されています。

ここで1.6.0_10からnextThreadID()メソッドです

private static synchronized long nextThreadID() {
    return ++threadSeqNumber;
}

(そこに長いオーバーフローのバグが実際におそらくあります、おそらくそれが実際に起こったことがないです)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top