区分Java线程和OS线程?

2024-10-29 08:34:00
admin
原创
51
摘要:问题描述:如何区分正在运行的 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 会崩溃。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用