读《unix网络编程第二卷进程通信》
1.管道
2.消息队列
3.信号量
4.共享内存
这些在java中怎么实现?
如果是管道,参考http://www.iteye.com/topic/156804,看下面代码,
注意把“注意这里!!!!!!!!”的i换成256实验一下效果
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
public class CommunicateWhitPiping {
public static void main(String[] args) {
PipedOutputStream pos = new PipedOutputStream();
PipedInputStream pis = new PipedInputStream();
try {
pos.connect(pis);//将管道输入流与输出流连接 此过程也可通过重载的构造函数来实现
} catch (IOException e) {
e.printStackTrace();
}
Producer p = new Producer(pos);//创建生产者线程
Consumer c = new Consumer(pis);//创建消费者线程
p.start();//启动线程
c.start();
}
}
class Producer extends Thread {//生产者线程(与一个管道输入流相关联)
private PipedOutputStream pos;
public Producer(PipedOutputStream pos) {
this.pos = pos;
}
public void run() {
int i = 99;//256,257,注意这里!!!!!!!!
try {
pos.write(i);
} catch (IOException e) {
e.printStackTrace();
}
}
}
class Consumer extends Thread {//消费者线程(与一个管道输入流相关联)
private PipedInputStream pis;
public Consumer(PipedInputStream pis) {
this.pis = pis;
}
public void run() {
try {
System.out.println(pis.read());
} catch (IOException e) {
e.printStackTrace();
}
}
}
如果是c里面
看unpv22e/pipe/mainpipe.c
#include "unpipc.h"
void client(int, int), server(int, int);
int
main(int argc, char **argv)
{
int pipe1[2], pipe2[2];
pid_t childpid;
Pipe(pipe1); /* create two pipes */
Pipe(pipe2);
if ( (childpid = Fork()) == 0) { /* child */
Close(pipe1[1]);
Close(pipe2[0]);
server(pipe1[0], pipe2[1]);
exit(0);
}
/* 4parent */
Close(pipe1[0]);
Close(pipe2[1]);
client(pipe2[0], pipe1[1]);
Waitpid(childpid, NULL, 0); /* wait for child to terminate */
exit(0);
}
-------------------------------------
共享内存参考http://coach.iteye.com/blog/738214