java linuc进程间通信对比

读《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

你可能感兴趣的:(java,编程,C++,c,C#)