区分Java线程和OS线程?

2024-10-29 08:34:00
admin
原创
188
摘要:问题描述:如何区分正在运行的 Java 线程和本机线程?在Linux中每个子进程都会有一个父进程,并且他们说0是所有进程的父进程,那么所有分叉的Java线程都会有一个父线程吗?我如何知道哪个 Java 线程与 OS 线程相关(如果 Java 线程分叉本机进程线程)。Java线程和OS线程有命名约定吗?正在运行...

问题描述:

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

在Linux中每个子进程都会有一个父进程,并且他们说0是所有进程的父进程,那么所有分叉的Java线程都会有一个父线程吗?

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

Java线程和OS线程有命名约定吗?

正在运行的 Java 线程可以被另一个 Java 代码暂停或终止吗?


解决方案 1:

在Linux上,Java线程是通过本机线程实现的,因此使用线程的Java程序与使用线程的本机程序没有区别。“Java线程”只是属于JVM进程的线程。

在现代 Linux 系统(使用 NPTL 的系统)中,属于一个进程的所有线程都具有相同的进程 ID 和父进程 ID,但线程 ID 不同。您可以通过运行 查看这些 ID。PIDps -eLf列是进程 ID,PPID 列是父进程 ID,LWP 列是线程(轻量级进程)ID。“主”线程的线程 ID 与进程 ID 相同,其他线程将具有不同的线程 ID 值。

较旧的 Linux 系统可能使用“linuxthreads”线程实现,但该实现不完全符合 POSIX 标准,而不是 NPTL。在 linuxthreads 系统上,线程具有不同的进程 ID。

您可以通过将系统的 C 库 (libc) 作为独立程序运行并在其输出中查看“可用扩展”来检查系统是否正在使用 NPTL 或 linuxthreads。它应该提到“本机 POSIX 线程库”或 linuxthreads。C 库的路径因系统而异:它可能是(在基于 64 位 RedHat 的系统上),或类似的东西/lib/libc.so.6(在基于 Debian 的现代系统上,例如 Ubuntu)。/lib64/libc.so.6`/lib/x86_64-linux-gnu/libc.so.6`

在操作系统级别,thead 没有名称;它们只存在于 JVM 中。

pthread_kill()C 函数可用于向特定线程发送信号,您可以使用该信号尝试从 JVM 外部终止该特定线程,但我不知道 JVM 将如何响应它。它可能会终止整个 JVM。

解决方案 2:

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

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

解决方案 3:

对于如何将 Java 线程映射到 OS 线程,没有通用的解决方案,甚至根本没有。每个 JVM 实现都可以用不同的方式实现。

还有一种纯 Java 线程实现,称为绿色线程。如果不支持本机线程或系统根本不是多线程的,则可将其用作后备。您不会在操作系统上看到任何绿色线程。

正在运行的 Java 线程可以被另一个 Java 代码暂停或终止吗?

如果它们在同一个 JVM 上运行,可以使用 stop()。但这不是一个好的解决方案,可能有效,也可能无效。interrupt() 允许线程安全地自行关闭。

据我所知,没有办法在 JVM 之外终止线程。如果操作系统真的支持终止线程,那么我不会指望 Java 应用程序之后能够正常运行!

解决方案 4:

正在运行的 Java 线程可以被另一个 Java 代码暂停或终止吗?

理论上是的。实际上,Thread.kill()Thread.suspend()方法已被弃用,因为它们不安全,除非在非常有限的情况下。基本问题是,终止或暂停 Java 线程可能会扰乱依赖于它的其他线程以及它可能正在更新的共享数据结构。

如果“另一个 Java 代码”指的是另一个 JVM,那么它工作的可能性就更小了。即使你知道如何发送相关的线程信号,结果也是完全不可预测的。我敢打赌,“目标”JVM 会崩溃。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用