Linuxでは、Javaスレッドはネイティブスレッドで実装されるため、スレッドを使用するJavaプログラムはスレッドを使用するネイティブプログラムと同じです。 「Javaスレッド」は、JVMプロセスに属する単なるスレッドです。
最新のLinuxシステム(NPTLを使用するシステム)では、プロセスに属するすべてのスレッドは同じプロセスIDと親プロセスIDを持ちますが、スレッドIDは異なります。 ps -eLf
を実行すると、これらのIDが表示されます。 PID列はプロセスID、PPID列は親プロセスID、LWP列はスレッド(LightWeightプロセス)IDです。 「メイン」スレッドはプロセスIDと同じスレッドIDを持ち、追加のスレッドは異なるスレッドID値を持ちます。
古いLinuxシステムでは、NPTLの代わりに完全にPOSIXに準拠していない「linuxthreads」スレッド実装を使用することがあります。 linuxthreadsシステムでは、スレッドは異なるプロセスIDを持ちます。
システムのCライブラリ(libc)をスタンドアロンプログラムとして実行し、その出力で「使用可能な拡張子」を調べることで、システムがNPTLまたはlinuxthreadsを使用しているかどうかを確認できます。 「ネイティブPOSIXスレッドライブラリ」またはlinuxthreadsのいずれかを記述する必要があります。 Cライブラリへのパスはシステムによって異なります。/lib/libc.so.6
,/lib64/libc.so.6
(64ビットRedHatベースのシステム)、または/lib/x86_64-linux-gnu/libc.so.6
(Ubuntuなどの最近のDebianベースのシステムでは)のようなものがあります。
OSレベルでは、theadsには名前がありません。それらはJVM内にのみ存在します。
pthread_kill()
C関数を使用して特定のスレッドに信号を送ることができます。このスレッドを使用して、特定のスレッドをJVM外から取り除くことができますが、JVMがどのように応答するかはわかりません。それはちょうどJVM全体を殺すかもしれない。
Stephen C、LinuxスレッドのネーミングとJavaスレッドのネーミングがどのように関係しているかを学習しています。また、LinuxでJVMスレッド管理をどのように管理するかについても説明します。 – karthi