如何区分运行的Java线程和本机线程?
在Linux中,每个子进程都有父进程,他们说0是所有进程的父进程,所有Forking 的Java线程都有父线程吗?
我如何知道哪个Java线程与OS线程相关(如果Java线程Forking 于本机进程线程).
Java线程和OS线程是否有命名约定?
运行的Java线程是否可以从另一个Java代码中暂停或终止?
如何区分运行的Java线程和本机线程?
在Linux中,每个子进程都有父进程,他们说0是所有进程的父进程,所有Forking 的Java线程都有父线程吗?
我如何知道哪个Java线程与OS线程相关(如果Java线程Forking 于本机进程线程).
Java线程和OS线程是否有命名约定?
运行的Java线程是否可以从另一个Java代码中暂停或终止?
在Linux上,Java线程是用本机线程实现的,因此使用线程的Java程序与使用线程的本机程序没有什么不同."Java线程"只是属于JVM进程的线程.
在现代Linux系统(使用NPTL的系统)上,属于一个进程的所有线程都具有相同的进程ID和父进程ID,但线程ID不同.运行ps -eLf
可以看到这些ID.PID列是进程ID,PPID列是父进程ID,LWP列是线程(轻量级进程)ID."主"线程具有与进程ID相同的线程ID,其他线程将具有不同的线程ID值.
较旧的Linux系统可能会使用"linuxthreads"线程实现,而不是NPTL,它不完全兼容POSIX.在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
(在基于Debian的现代系统上,比如Ubuntu).
在操作系统层面,Thead没有名字;这些只存在于JVM中.
pthread_kill()
C函数可以用来向特定线程发送信号,你可以用它从JVM外部杀死特定线程,但我不知道JVM会如何响应.它可能会杀死整个JVM.