java - Java 线程和 OS 线程之间的通信

标签 java multithreading operating-system

据我所知,Java线程可以使用一些线程API进行通信。但我想知道 Java 线程和 OS 线程是如何相互通信的。例如,一个 Java 线程需要等待某个 OS 线程完成其执行并将一些结果返回给该 Java 线程并进行处理。

最佳答案

许多人在这里混淆了线程和进程,jvm 是一个可能产生更多线程的进程。线程是较轻的进程,它们在进程内共享内存。另一方面,一个进程存在于他自己的地址空间中,这使得上下文切换更加昂贵。您可以通过操作系统提供的 IPC 机制在不同进程之间进行通信,并且由于共享内存和其他技术,您可以在同一进程内的不同线程之间进行通信。您不能在不通过普通旧 IPC 的情况下从 ThreadA(ProcessA) 到 ThreadA(ProcessB) 进行通信:ThreadA(ProcessA) -> ProcessA -> IPC(OS) -> ProcessB -> ThreadA(ProcessB)) .

您可以使用 RMI 在两个 java 进程之间进行通信,如果您想与 native 操作系统进程“对话”,则必须使用 JNI 来调用您选择的操作系统提供的 IPC 机制。

请随时在这里纠正我:)

旁注: 您无法使用进程管理器查看 JVM 的线程(只要您的 JVM 不将线程映射到 native 进程,这很愚蠢但可能),您需要使用 jps 和 jstack 来做到这一点。

关于java - Java 线程和 OS 线程之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3723955/

相关文章:

java - 将值从类设置到 Spring 上下文文件

java - 如何使用在 Tomcat 上运行的 servlet 执行文件 I/O

objective-c - 在后台线程上搜索

c++ - QList、QVector 或 std::vector 多线程使用

java - Stopself() 究竟做了什么?终止服务运行的最佳方式是什么?

java - 为什么我的线程没有唤醒? ( java )

embedded - 基于轮询或中断的方法

linux-kernel - 为什么 x86-64 Linux 系统调用使用 6 个寄存器集工作?

windows - 从 XP/Vista 迁移到 Windows 7 时,程序员应该了解什么?

java - 从 UNIX 时间到日历的转换 - 存在一小时的不一致