あなたの質問に最も直接的に答えるために、スレッドの実装方法に関する正確なセマンティクスは、JVM 仕様では意図的に定義されていません。
FWIW、「Java の公開されたスレッド モデルはすべてのプラットフォームで同じであり、Java 仕様で定義されています。Java アプリケーションにとって、基盤となる OS はスレッドに対しても完全に透過的である必要があります」という Sebastion の声明は不正確です。
待機/通知を使用したスレッド スタベーションに関して、Windows と Linux でのスレッド化の間に経験的に大きな違いがあることを発見しました。多くのスレッドが単一のロックをめぐって競合する場合、Linux は著しく枯渇しやすくなります。Windows では Linux よりも3桁も多くのスレッドをロードして、枯渇を引き起こす必要がありました。ロックの競合が激しい場合は、フェア修飾子を使用した Java 同時実行ロックが重要になります。
数値を説明すると、Linux では 1 つのロックが 31 のスレッドによって激しく競合するという問題がありました。Windows では、同じコードが 10,000 (そうです、10,000 です) のスレッドを必要とし、飢餓の問題を示し始めました。
さらに悪いことに、Linux には 3 つの異なるスレッド モデルがあり、それぞれに異なる特性があります。
ほとんどの場合、私の経験ではスレッド化は透過的でしたが、競合の問題については慎重に検討する必要があります。