为什么80%的码农都做不了架构师?>>>   

java的两个进程都是两个虚拟机间的通信了,跟平台相关的,要是在vc里就简单,你可以运行在两个线程中用管道通信

或者通过socket来通信,或者用外部文件通信。


java的管制范围就只能在各自的虚拟机里,像VC一样就能用进程间通信,共享内存,内存映射文件,要不java用jni吧。


看到楼主提到进程间通信,又想起了以前使用C编程的时光。 :)
先看看传统的进程间通信的手段有什么,上面的各位都说了不少了,无外乎还是以下的这些手段:
(1) 管道(PIPE)
(2) 命名管道(FIFO)
(3) 信号灯(Semphore)
(4) 消息队列(MessageQueue)
(5) 共享内存(SharedMemory)
(6) Socket(当然也有Socket)
如果加上上面提到的临时文件(临时文件其实是很难处理的,不同的进程间单靠临时文件可以交互信息,但是做到进程的调度控制确是很费力的事情,当然也不是不能做到)

现在楼主的问题是JAVA如何支持进程间通信。俺们把JAVA进程理解为JVM进程。很明显,传统的这些大部分技术是无法被俺们的应用程序利用了(这些进程间通信都是靠系统调用来实现的)。但是JAVA也有很多方法可以进行进程间通信的。
除了上面提到的Socket之外,当然首选的IPC可以使用RMI,或者CORBA也可以。

其实JAVA的CORBA实现也是通过RMI来实现的,而RMI归根结底也是靠Socket来实现的。
所以说JAVA进程间通信的最基本手段是Socket也不为过。


下边的是共享内存的例子,看看对你有没有帮助
package sharedmemory;import java.io.*;
import java.nio.*;
import java.nio.channels.*;/*** <p>Title: </p>* <p>Description: </p>* <p>Copyright: Copyright (c) 2003</p>* <p>Company: </p>* @author not attributable* @version 1.0*/public class Consumer extends Thread
{private String mFileName;private FileChannel mFileChannel;private MappedByteBuffer mMappedByteBuffer;public Consumer(String fn){try{mFileName=fn;// 获得一个可读写的随机存取文件对象RandomAccessFile RAFile=new RandomAccessFile(mFileName,"r");// 获得相应的文件通道mFileChannel=RAFile.getChannel();// 取得文件的实际大小,以便映像到共享内存int size=(int)mFileChannel.size();// 获得共享内存缓冲区,该共享内存可读mMappedByteBuffer=mFileChannel.map(FileChannel.MapMode.READ_ONLY,0,size).load();}catch(IOException ex){System.out.println(ex);}}public void run(){while(true){try{Thread.sleep(300);FileLock lock=null;lock=mFileChannel.tryLock(0,10,true);if(lock==null){System.err.println("Consumer: lock failed");continue;}Thread.sleep(200);System.out.println("Consumer: "+mMappedByteBuffer.getInt(0)+":"+mMappedByteBuffer.getInt(4)+":"+mMappedByteBuffer.getInt(8));lock.release();}catch(IOException ex){System.out.print(ex);}catch(InterruptedException ex){System.out.print(ex);}}}public static void main(String args[]){Consumer consumer=new Consumer("sharedMemory.bin");consumer.start();}
}package sharedmemory;import java.io.*;
import java.nio.*;
import java.nio.channels.*;/*** <p>Title: </p>* <p>Description: </p>* <p>Copyright: Copyright (c) 2003</p>* <p>Company: </p>* @author not attributable* @version 1.0*/
public class Producer extends Thread
{private String mFileName;private FileChannel mFileChannel;private MappedByteBuffer mMappedByteBuffer;public Producer(String fn){try{mFileName=fn;// 获得一个可读写的随机存取文件对象RandomAccessFile RAFile=new RandomAccessFile(mFileName,"rw");// 获得相应的文件通道mFileChannel=RAFile.getChannel();// 取得文件的实际大小,以便映像到共享内存int size=(int)mFileChannel.size();// 获得共享内存缓冲区,该共享内存可读mMappedByteBuffer=mFileChannel.map(FileChannel.MapMode.READ_WRITE,0,size).load();}catch(IOException ex){System.out.println(ex);}}public void run(){int i=0;while(true){try{FileLock lock=null;lock=mFileChannel.tryLock();if(lock==null){System.err.println("Producer: lock failed");continue;}mMappedByteBuffer.putInt(0,++i);mMappedByteBuffer.putInt(4,++i);mMappedByteBuffer.putInt(8,++i);System.out.println("Producer: "+(i-3)+":"+(i-2)+":"+(i-1));Thread.sleep(200);lock.release();Thread.sleep(500);}catch(IOException ex){System.out.print(ex);}catch(InterruptedException ex){System.out.print(ex);}}}public static void main(String args[]){Producer producer=new Producer("sharedMemory.bin");producer.start();}}

转载于:https://my.oschina.net/adan1/blog/229000

java如何实现进程间的通信?相关推荐

  1. 第十章 进程间的通信 之 Java/Android多线程开发(二)

    文章目录 (一)Java 多线程开发 1.1)线程状态 1.2)线程控制方法 (1.2.1)Synchronized (1.2.2)Volatile (1.2.3)ReentrantLock 1.3) ...

  2. Android 使用AIDL实现进程间的通信

    在Android中,如果我们需要在不同进程间实现通信,就需要用到AIDL技术去完成. AIDL(android Interface Definition Language)是一种接口定义语言,编译器通 ...

  3. 使用AIDL实现进程间的通信

    在Android中,如果我们需要在不同进程间实现通信,就需要用到AIDL技术去完成. AIDL(Android Interface Definition Language)是一种接口定义语言,编译器通 ...

  4. linux+Qt 下利用D-Bus进行进程间高效通信的三种方式

    linux+Qt 下利用D-Bus进行进程间高效通信的三种方式 原文链接: https://www.cnblogs.com/wwang/archive/2010/10/27/1862552.html ...

  5. 同步线程和进程间的通信

    最近回去学习了一下进程和进程间的通信,有时候很多东西久不看了也就一下子忘了== 这里面有好几个互斥对象使用线程的 1 void mListText(CString str) 2 { 3 m_list_ ...

  6. 【转载】进程间的通信之剪贴板方法实现源码

    1 源码无私奉献 2 3 void CClipboardDlg::OnBnClickedButton1() 4 { 5 // TODO: 在此添加控件通知处理程序代码 6 //打开剪贴板 7 if(O ...

  7. 进程间的通信IPC(无名管道和命名管道)

    进程间的通信IPC介绍 进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息. IPC的方式通常有管道(包括无名管道和命名管道).消息队列.信号量 ...

  8. Linux系统编程(三)进程间的通信

    Linux系统编程(三)进程间的通信 一.为什么需要进程之间的通信(IPC)? 二.管道 1.概念 2.特质 3.原理 4.局限性 5.代码 2.读入数据 三.共享存储映射 注意事项 父子进程通信 一 ...

  9. 进程间的通信——无名管道

    进程间的通信--无名管道 宗旨:技术的学习是有限的,分享的精神是无限的. 一.进程间的通信 (1)同主机进程间数据交互机制:无名管道(PIPE),有名管道(FIFO).消息队列和共享内存.无名管道多用 ...

  10. 进程间的通信之1-----管道

    进程间的通信之1-----管道 1.标准流管道 像文件操作有标准 io 流一样, 管道也支持文件流模式. 用来创建连接到另一进程的管道, 是通过函数 popen 和 pclose. 函数原型: #in ...

最新文章

  1. Android Stadio配置了gralde的本地路径,但是windos 命令行还是会下载gradle
  2. 30分钟从工作电脑入侵公司内网!Win11:更新强制要求有TPM2.0,知道为啥了吧?...
  3. WindowsPE 第五章 导出表编程-1(枚举导出表)
  4. FPGA实验四——时间基准电路和带使能的多周期计数器
  5. GARFIELD@01-16-2005
  6. 前端学习(2792):下拉刷新
  7. 获取pheatmap热图聚类后和标准化后的结果
  8. MIT探索深度学习网络的基础理论
  9. 博图组态显示未分配的设备_S71200CPU做IO共享设备的配置方法【图文】
  10. 小凡虚拟机桥接到pc步骤实施
  11. android xutils3 注解,xUtils3使用简介
  12. aardio - 【库】FlexCell表格组件
  13. 酷我音乐解析API,支持搜索、歌单、单曲、专辑、MV解析、多音质切换、图片大小切换
  14. 工作学习中word及电脑常备小知识(C盘清理、电脑上微信记录清理)
  15. 如何在腾讯云快速注册域名
  16. 利用html和js输入数字转换为中文大写示例。
  17. matlab图上输入希腊字母,Matlab中给图形添加【希腊字母】
  18. Oracle数据库学习基础
  19. ABAP 调用migo
  20. 【obs】动态码率:码率估算

热门文章

  1. python编程学习笔记_python学习笔记--python编程基础
  2. dingtalk 推送手机号信息 golang_PureQuant使用功能介绍(二):通过配置模块导入API信息...
  3. jsonp和ajax的区别,dataType jsonp和JSON之间的区别
  4. java rpg对战_java实现模拟RPG格斗
  5. vscode 添加库头文件_VSCode配置C/C++并添加非工作区头文件的方法
  6. c语言json数组转字符串数组,JS中json字符串和数组相互转换
  7. handler回调主线程_Handler源码和9个常见问题的解答,这些你都掌握了吗?
  8. docker运行镜像报错:write init-p: broken pipe
  9. iOS内存管理部分内容
  10. 信号在网线和集线器中的传输(《网络是怎样连接的》).md