据我所知,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/