利用PipedWriter和PipedReader实现两个线程通讯

本文介绍了一个使用 Java 的 PipedWriter 和 PipedReader 实现线程间通信的示例程序。通过发送者线程不断写入字符,接收者线程读取并打印这些字符,展示了线程间的同步通信过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
 * 本程序演示了利用PipedWriter和PipedReader实现两个线程通讯的例子。
 */
package com.lwj.demo;

import java.io.*;

class Sender implements Runnable {
 private PipedWriter out;

 public Sender() {
  out = new PipedWriter();
 }

 public PipedWriter getOut() {
  return out;
 }

 public void run() {
  for (char ch = 'a'; ch <= 'z'; ch++) {
   try {
    out.write(ch);
    System.out.println(Thread.currentThread().getName()+":已发送"+ch);
    Thread.sleep(50);//为了好观察
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  try{
   out.close();//记得关闭哟!
  }catch(Exception e){
   e.printStackTrace();
  }
 }
}

class Receiver implements Runnable {
 PipedReader in;

 public Receiver(Sender sender) {
  try {
   in = new PipedReader(sender.getOut());
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 public void run() {
  int i;
  try {
   while ((i=in.read())!=-1) {
   Thread.sleep(50);//为了好观察
   System.out.println(Thread.currentThread().getName()+":接收"+(char)i+"完毕!");
   }
  } catch (Exception e) {
    e.printStackTrace();
   }
  try{
   in.close();//记得关闭哟!
  }catch(Exception e){
   e.printStackTrace();
  }
 }
}

public class PipedIO {
 public static void main(String[] args) {
  Sender sender = new Sender();
  Receiver receiver = new Receiver(sender);
  Thread senderThread = new Thread(sender,"发送者线程");
  Thread receiverThread = new Thread(receiver,"接收者线程");
  senderThread.start();
  receiverThread.start();
 }
}

运行结果(可能每次不一样):

发送者线程:已发送a
发送者线程:已发送b
接收者线程:接收a完毕!
接收者线程:接收b完毕!
发送者线程:已发送c
发送者线程:已发送d
发送者线程:已发送e
发送者线程:已发送f
发送者线程:已发送g
发送者线程:已发送h
发送者线程:已发送i
发送者线程:已发送j
发送者线程:已发送k
发送者线程:已发送l
发送者线程:已发送m
发送者线程:已发送n
发送者线程:已发送o
发送者线程:已发送p
发送者线程:已发送q
发送者线程:已发送r
接收者线程:接收c完毕!
接收者线程:接收d完毕!
发送者线程:已发送s
发送者线程:已发送t
接收者线程:接收e完毕!
接收者线程:接收f完毕!
发送者线程:已发送u
发送者线程:已发送v
接收者线程:接收g完毕!
接收者线程:接收h完毕!
发送者线程:已发送w
发送者线程:已发送x
接收者线程:接收i完毕!
发送者线程:已发送y
接收者线程:接收j完毕!
接收者线程:接收k完毕!
发送者线程:已发送z
接收者线程:接收l完毕!
接收者线程:接收m完毕!
接收者线程:接收n完毕!
接收者线程:接收o完毕!
接收者线程:接收p完毕!
接收者线程:接收q完毕!
接收者线程:接收r完毕!
接收者线程:接收s完毕!
接收者线程:接收t完毕!
接收者线程:接收u完毕!
接收者线程:接收v完毕!
接收者线程:接收w完毕!
接收者线程:接收x完毕!
接收者线程:接收y完毕!
接收者线程:接收z完毕!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值