java 管道通信 c_JAVA中管道通讯(线程间通讯)例子

本文介绍了Java中利用管道流实现线程间通信的方法。通过创建Sender和Recive两个线程,Sender线程写入数据,Recive线程读取数据,实现了线程间的非共享数据通信。示例代码展示了如何创建并连接PipedInputStream和PipedOutputStream,以及处理可能出现的IOException。
摘要由CSDN通过智能技术生成

Java I/O系统是建立在数据流概念之上的,而在UNIX/Linux中有一个类似的概念,就是管道,它具有将一个程序的输出当作另一个程序的输入的能力。在Java中,可以使用管道流进行线程之间的通信,输入流和输出流必须相连接,这样的通信有别于一般的Shared Data通信,其不需要一个共享的数据空间。

package lesson.io.test;

import java.io.*;

public class TestPiped

{

public static void main(String[] args)

{

Sender sender = new Sender();

Recive recive = new Recive();

PipedInputStream pi=recive.getPipedInputputStream();

PipedOutputStream po=sender.getPipedOutputStream();

try

{

pi.connect(po);

} catch (IOException e)

{

System.out.println(e.getMessage());

}

sender.start();

recive.start();

}

}

class Sender extends Thread

{

PipedOutputStream out = null;

public PipedOutputStream getPipedOutputStream()

{

out = new PipedOutputStream();

return out;

}

@Override

public void run()

{

try

{

out.write("Hello , Reciver!".getBytes());

} catch (IOException e)

{

System.out.println(e.getMessage());

}

try

{

out.close();

} catch (IOException e)

{

System.out.println(e.getMessage());

}

}

}

class Recive extends Thread

{

PipedInputStream in = null;

public PipedInputStream getPipedInputputStream()

{

in = new PipedInputStream();

return in;

}

@Override

public void run()

{

byte[] bys = new byte[1024];

try

{

in.read(bys);

System.out.println("读取到的信息:" + new String(bys).trim());

in.close();

} catch (IOException e)

{

System.out.println(e.getMessage());

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值