Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
区分Java线程和OS线程?_Java_Linux_Jvm_Multithreading_Posix - Fatal编程技术网

区分Java线程和OS线程?

区分Java线程和OS线程?,java,linux,jvm,multithreading,posix,Java,Linux,Jvm,Multithreading,Posix,如何区分运行的Java线程和本机线程 在Linux中,每个子进程都有父进程,他们说0是所有进程的父进程,所有分叉的Java线程都有父线程吗 我如何知道哪个Java线程与OS线程相关(如果Java线程分叉于本机进程线程) Java线程和OS线程是否有命名约定 运行的Java线程是否可以从另一个Java代码挂起或终止?没有标准;这完全取决于您使用的Java实现。另外,不要混淆“本机线程”和“本机进程”。进程是一个孤立的实体,无法看到其他进程的地址空间。线程是在本机进程的地址空间中运行的,并且可以查看

如何区分运行的Java线程和本机线程

在Linux中,每个子进程都有父进程,他们说0是所有进程的父进程,所有分叉的Java线程都有父线程吗

我如何知道哪个Java线程与OS线程相关(如果Java线程分叉于本机进程线程)

Java线程和OS线程是否有命名约定


运行的Java线程是否可以从另一个Java代码挂起或终止?

没有标准;这完全取决于您使用的Java实现。另外,不要混淆“本机线程”和“本机进程”。进程是一个孤立的实体,无法看到其他进程的地址空间。线程是在本机进程的地址空间中运行的,并且可以查看同一进程的其他线程的内存


在Linux上看到的是另一种情况:Linux的某些版本在进程表中为父进程的每个线程创建一个条目。这些“过程”不是真正的过程(在隔离的意义上)。它们是可以使用
ps
命令列出的线程。您可以使用父PID(PPID)找到创建它们的进程。

没有标准;这完全取决于您使用的Java实现。另外,不要混淆“本机线程”和“本机进程”。进程是一个孤立的实体,无法看到其他进程的地址空间。线程是在本机进程的地址空间中运行的,并且可以查看同一进程的其他线程的内存


在Linux上看到的是另一种情况:Linux的某些版本在进程表中为父进程的每个线程创建一个条目。这些“过程”不是真正的过程(在隔离的意义上)。它们是可以使用
ps
命令列出的线程。您可以找到使用父PID(PPID)创建它们的进程。

在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\u kill()
C函数可用于向特定线程发送信号,您可以使用该信号尝试从JVM外部杀死该特定线程,但我不知道JVM会如何响应。它可能会杀死整个JVM。

在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\u kill()
C函数可用于向特定线程发送信号,您可以使用该信号尝试从JVM外部杀死该特定线程,但我不知道JVM会如何响应。它可能会杀死整个JVM。

没有通用的解决方案来解决如何将Java线程映射到操作系统线程(如果有的话)。每一个JVM实现都可以用不同的方式实现它

还有一个纯Java线程实现,称为。如果本机线程不受支持或系统根本不是多线程的,这将用作回退。在操作系统上看不到任何绿色线程

你能给我一辆自行车吗