10

待機と通知は、スレッド間で渡されるメッセージのように見えます。これが当てはまる場合、これらのメッセージをバッファリングするためのキューが必要です。もしそうなら、キューにメッセージを追加したりキューからメッセージを削除したりするためのアトミック操作が必要であり、これらのメッセージをリッスンする各 Java スレッドのヘルパー スレッドも必要ですか?

ご意見をお聞かせいただければ幸いです。

4

2 に答える 2

1

待機と通知は、スレッド間で渡されるメッセージのように見えますが、

それらは実際にはメッセージではありません。スレッドが呼び出すwait()と、そのスレッドは特定のオブジェクト モニターに関連付けられた待機キューに入れられます。別のスレッドが呼び出すnotify()と、最初のスレッド (存在する場合) がキューから取り出され、「実行」キューに入れられます。スレッドの状態を変更し、スレッド間のメッセージではなくスレッドをキューに入れることです。

その場合、キューにメッセージを追加したり、キューからメッセージを削除したりするためのアトミック操作が必要です

ほとんどの場合、メッセージ キューに関するアトミック操作はありませんが、メモリ ロケーションのテスト/設定に関するアトミック操作は確かにあり、ロックを取得して他のスレッドの競合を解決するのに役立ちます。

これらのメッセージをリッスンする Java スレッドごとにヘルパー スレッドが必要ですか?

Java スレッドごとにヘルパー スレッドが存在するわけではありません。Java スレッドがある状態から別の状態に遷移するか、タイム スライスされると、その状態を維持し、すべてのメッセージングとシグナリングを行う関連する OS スレッドが Java スレッドに関連付けられます。ほとんどの (すべてではないにしても) 実装では、Java アカウンティングを実行するために JVM ネイティブ コードを残して、スレッド スケジューリングを処理する OS とハードウェアも備えています。

于 2013-10-08T12:33:50.943 に答える
0

JVM は、OS または場合によってはサードパーティ ライブラリによって提供されるプリミティブを使用します。これらを実装する JVM はありません。通常、Windows JVM は Windows スレッドを使用しますが、Linux では、実装で Linux カーネル スレッドまたは POSIX Threads ( pthreads) ライブラリのいずれかを使用できます。Mac OS X では、選択肢にはpthreadsまたは CocoaNSThreadライブラリが含まれます。

于 2013-10-08T12:31:53.277 に答える