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

Jav*_*ser 3 java multithreading operating-system

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

ata*_*man 6

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

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

随意在这里纠正我:)

旁注:您无法使用流程管理器查看JVM的线程(只要您的JVM不将线程映射到本机进程,这可能是愚蠢但可能),您需要使用jps和jstack来执行此操作.