就我所知,Java线程可以使用某些线程API进行通信。但是我想知道Java线程和OS线程是如何相互通信的。例如,Java线程需要等待某个操作系统线程完成其执行,并将一些结果返回给此Java线程,并且它的处理过程相同。Java线程和操作系统线程之间的通信
3
A
回答
6
很多人在这里混淆了线程和进程,jvm是一个可能产生更多线程的进程。线程是在其进程中共享内存的较轻的进程。另一方面,进程存在于他自己的地址空间中,这使得上下文切换更加昂贵。您可以通过OS提供的IPC机制在不同进程之间进行通信,并且由于共享内存和其他技术,您可以在同一进程内的不同线程之间进行通信。你不能从ThreadA中(ProcessA)来的ThreadA(进程B)不通过普通的老IPC去沟通:ThreadA(ProcessA) -> ProcessA -> IPC(OS) -> ProcessB -> ThreadA(ProcessB)).
可以使用RMI两个Java进程间通信,如果要“对话”原生OS进程,你必须去JNI调用你选择的操作系统提供的IPC机制。
欢迎随时指正:)
旁注: 你不能看到你的JVM的线程与进程管理器(只要你的JVM不线程映射到本地的过程,这将是愚蠢的但可能),你需要使用jps和jstack来做到这一点。
0
-1
Java线程通常但不一定在本机线程上运行,Java并发类可以但不一定映射到本机等值线上。
如果您必须在本机线程和Java线程之间进行同步,那么您很可能不得不考虑编写Java线程调用的JNI方法。这个JNI方法可以完成它需要做的任何本地同步操作,然后返回。每个平台都会以不同的方式做到这一点,但如果您需要首先检查本机线程,我认为这不会成为太大的问题。
相关问题
- 1. forkIO线程和操作系统线程
- 2. 主线程和工作线程之间的通信java
- 3. 无效Java线程和本地操作系统线程
- 4. 进程和线程在操作系统
- 5. java中的线程之间的通信
- 6. 线程之间的通信?
- 7. 线程之间的通信
- 8. 线程之间的通信
- 9. 线程和系统信号
- 10. 线程之间的Java通信
- 11. 语言/操作系统之间的进程间通信
- 12. 操作系统和并发线程
- 13. Task.Factory和线程之间的通信
- 14. 进程与线程之间的通信
- 15. 独立于操作系统的Python和C之间的程序间通信
- 16. python主线程和子线程之间的原子操作
- 17. 线程间通信(和库?)
- 18. 系统线程vs非系统线程
- 19. 德尔福-OTL-线程池和工作线程之间的通信
- 20. 间通信,线程
- 21. 线程间通信
- 22. PySide中的线程之间的通信
- 23. Qt中的线程之间的通信
- 24. EDT与主线程之间的通信
- 25. c#.Net 4.5线程之间的通信
- 26. 线程之间的串口通信
- 27. 强制线程之间的通信
- 28. 两个线程之间的通信
- 29. Windows操作系统环境下C++应用程序与Java应用程序之间的进程间通信
- 30. 线程之间的信号
线程为线程。不要混淆线程和**轻量级进程**:http://en.wikipedia.org/wiki/Light-weight_process – Jonas 2010-09-16 08:45:50
@Jonas是的,我不想在这里介绍LWP。将“轻量级”更改为“更轻”的过程,这至少不会出错;) – atamanroman 2010-09-16 09:01:59