管道流实现线程间的通信

旧城等待, 2023-06-13 09:43 63阅读 0赞

管道流(PipedInputStream、PipedOutputStream)继承自inputStream,一般用户线程间通信,不过一般不用它。。

。。
测试案例

发送方线程创建

  1. class SendThread implements Runnable{
  2. private PipedOutputStream outputStream = new PipedOutputStream();
  3. @Override
  4. public void run() {
  5. try {
  6. outputStream.write("管道对接成功!!".getBytes());
  7. } catch (IOException e) {
  8. e.printStackTrace();
  9. }
  10. }
  11. public PipedOutputStream getOutputStream() {
  12. return outputStream;
  13. }
  14. public void setOutputStream(PipedOutputStream outputStream) {
  15. this.outputStream = outputStream;
  16. }
  17. }

接收方线程创建

  1. class RecieveThread implements Runnable{
  2. private PipedInputStream inputStream = new PipedInputStream();
  3. @Override
  4. public void run() {
  5. byte[] data = new byte[1024];
  6. try {
  7. int len = inputStream.read(data);
  8. System.out.println("对接情况:"+new String(data,0,len));
  9. } catch (IOException e) {
  10. e.printStackTrace();
  11. }
  12. }
  13. public PipedInputStream getInputStream() {
  14. return inputStream;
  15. }
  16. public void setInputStream(PipedInputStream inputStream) {
  17. this.inputStream = inputStream;
  18. }
  19. }

测试

  1. public class GuandaoTest {
  2. public static void main(String[] args) {
  3. SendThread sendThread = new SendThread();
  4. RecieveThread recieveThread = new RecieveThread();
  5. PipedOutputStream outputStream = sendThread.getOutputStream();
  6. try {
  7. outputStream.connect(recieveThread.getInputStream());
  8. new Thread(sendThread).start();
  9. new Thread(recieveThread).start();
  10. } catch (IOException e) {
  11. e.printStackTrace();
  12. }
  13. }
  14. }

分析

在接受方有输入的管道流,发送方有输出的管道流,在客户端获取输出流,与其输入流进行对接,相当于管道接通,这时输入流就收到了输出流的信息。

发表评论

表情:
评论列表 (有 0 条评论,63人围观)

还没有评论,来说两句吧...

相关阅读

    相关 线通信管道

    管道输入/输出流 管道流是是一种使用比较少的线程间通信方式,管道输入/输出流和普通文件输入/输出流或者网络输出/输出流不同之处在于,它主要用于线程之间的数据传输,传输的媒介为

    相关 管道实现进程通信

    一、无名管道 1、什么是管道? 管道用于相关进程间的通信,相当于一个传递工具; 1、特点 (1)无名管道是半双工的,在管道的一端只能进行读或者是写,二者不可同