…
好记性不如烂笔头,PipedWriter 和 PipedReader的使用记录在我的小仓库。
上周公司好忙啊,趁着今天没啥事,偷偷学习一波!
翻看Thread的时候无意间看见了Peped管道,于是便好奇如何使用。
废话不多说,直接先看简单实例
package com.daily.thread;
import java.io.IOException;
import java.io.PipedReader;
import java.io.PipedWriter;
public class PipedDemo {
static PipedReader in = new PipedReader();
static PipedWriter out = new PipedWriter();
public static void inMethod() throws IOException {
System.out.println(" --in start");
int receive = 0;
while ((receive = in.read()) != 10){
System.out.println((char)receive);
}
System.out.println("-- in end");
}
public static void outMethod() throws IOException {
System.out.println(" --out start");
out.connect(in);
int receive = 0;
while ((receive = System.in.read()) != 10){
out.write((char)receive);
}
out.write(10);
System.out.println(" --out end");
}
public static void main(String[] args) {
new Thread(()->{
try {
outMethod();
} catch (IOException e) {
throw new RuntimeException(e);
}
}).start();
new Thread(()->{
try {
Thread.sleep(1000);
inMethod();
} catch (IOException | InterruptedException e) {
throw new RuntimeException(e);
}
}).start();
}
}
- 输出结果
在这里我们可以看出来在为未加锁的情况下,
PipedReader 和PipedWriter都进入了执行状态,
并且out等待系统输入( System.in.read() ),
in则是等待out (PipedWriter)的write写入之后输出(Sout…)。