社区
Java SE
帖子详情
java如何实现进程间的通信?
Mars_wx
2003-12-09 06:37:48
用SOCKET如何?
管道呢?
...全文
9887
29
打赏
收藏
java如何实现进程间的通信?
用SOCKET如何? 管道呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
29 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ralihm
2004-01-20
打赏
举报
回复
mark
kenny1979
2003-12-31
打赏
举报
回复
up
Mars_wx
2003-12-30
打赏
举报
回复
up
asdmonster
2003-12-20
打赏
举报
回复
学习
lapwing2002
2003-12-20
打赏
举报
回复
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();
}
}
lapwing2002
2003-12-20
打赏
举报
回复
下边的是共享内存的例子,看看对你有没有帮助
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();
}
}
lapwing2002
2003-12-19
打赏
举报
回复
java中可以使用共享内存
dongdong715
2003-12-16
打赏
举报
回复
学习!
minghui000
2003-12-16
打赏
举报
回复
up
Mars_wx
2003-12-15
打赏
举报
回复
....
Mars_wx
2003-12-15
打赏
举报
回复
应该是5个吧
lzsbj
2003-12-15
打赏
举报
回复
xiaohaiz(老土进城,两眼通红)
呵呵,原来土哥原来也用C,但是现在用java都4个裤衩了,高~~~~
tiger_wkh52741
2003-12-15
打赏
举报
回复
CORBA VS.RMI 就这些吧!
休息!
loveyousomuch
2003-12-15
打赏
举报
回复
学习一下,呵呵
kknd97
2003-12-13
打赏
举报
回复
如果是异步方式通信的话,可以考虑jms也是一个不错的选择!
祝你好运!
lanor168
2003-12-13
打赏
举报
回复
U cann use corba ,Jndi .It can help u in a strong way
Mars_wx
2003-12-13
打赏
举报
回复
受益!
wobelisk
2003-12-12
打赏
举报
回复
其实JAVA的CORBA实现也是通过RMI来实现的?
whose theory?
nil2000
2003-12-12
打赏
举报
回复
楼上的精辟,佩服
xiaohaiz
2003-12-12
打赏
举报
回复
看到楼主提到进程间通信,又想起了以前使用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也不为过。
加载更多回复(9)
Java
使用Socket
实现
进程
间
的
通信
本文详细介绍了使用
Java
实现
两个
进程
间
通信
的过程,演示了微服务底层
通信
的基本原理。通过创建服务端与客户端项目,
实现
接口调用,展示了Socket、IO、TCP及反射等技术的应用。
java
内存映射文件
进程
间
通讯_
Java
NIO 内存映射文件
实现
进程
间
通信
本文探讨了
Java
NIO的内存映射文件(MappedByteBuffer)如何用于
实现
跨
Java
进程
的数据
通信
。通过将同一物理文件映射到不同JVM的内存中,
实现
了
进程
间
的数据共享。虽然称为内存共享,但实际上是利用中
间
文件
实现
两
进程
间
内存内容的同步。
使用
Java
在 Android 平台上通过 socket
实现
进程
间
通信
本文介绍了使用
Java
在Android平台通过socket
实现
进程
间
通信
。Socket是应用层和传输层
间
的抽象层,分为流式和数据包套接字,对应TCP和UDP协议。文中给出示例,建立TestServerSocket和TestClientSocket两个工程,分别
实现
服务端监听和客户端连接
通信
,连接建立后客户端可向服务端发信息。
03 storm 源码阅读 storm的
进程
间
消息
通信
实现
clojure端 加载
java
端netty能力
本文详细介绍了如何在Clojure中
实现
Java
进程
间
通信
,包括使用LocalContext、LocalConnection和add-queue方法来建立和管理
通信
通道。重点讨论了如何在不同
Java
进程
之
间
传递任务消息,通过Netty
实现
的底层细节被封装为Clojure函数,简化了
进程
间
通信
的复杂性。
Java
NIO 应用 -- 使用内存映射文件
实现
进程
间
通信
本文介绍如何使用
Java
NIO的内存映射文件(MappedByteBuffer)在多个
Java
进程
间
共享数据,通过将同一物理文件映射到不同JVM的地址空
间
实现
进程
间
通信
,演示了WriteShareMemory和ReadShareMemory两个程序如何利用共享内存交换数据。
Java SE
62,622
社区成员
307,257
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章