📄 pipetest.java
字号:
//两个线程通过管道I/O类实现读写
import java.io.*;
//创建一个新类来管理管道的同步问题
class Shared{
DataOutputStream dos;
DataInputStream dis;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
boolean canRead = false;
public Shared(PipedOutputStream pos, PipedInputStream pis){
this.dos = new DataOutputStream(pos);
this.dis = new DataInputStream(pis);
}
synchronized void write() throws IOException{
if(!canRead){
System.out.print("writer>>");
String temp = br.readLine();
dos.writeUTF(temp);
canRead = true;
}
}
synchronized void read() throws IOException{
if(canRead){
System.out.print("read<<");
String temp = dis.readUTF();
System.out.println(temp);
canRead = false;
}
}
}
class Write extends Thread{
Shared shared;
DataOutputStream out;
Write(Shared shared){
this.shared = shared;
}
public void run(){
try{
while(true){
shared.write();
}
}
catch(Exception e){
}
}
}
class Read extends Thread{
Shared shared;
DataInputStream in;
Read(Shared shared){
this.shared = shared;
}
public void run(){
try{
while(true){
shared.read();
}
}
catch(Exception e){}
}
}
public class PipeTest{
public static void main(String[] args){
try{
PipedOutputStream out=new PipedOutputStream();
//PipedInputStream in=new PipedInputStream();
//可以直接通过构造函数将两个管道连接起来
PipedInputStream in=new PipedInputStream(out);
//out.connect(in);
Shared shared = new Shared(out, in);
Read reader=new Read(shared);
Write writer=new Write(shared);
writer.start();
reader.start();
}
catch(Exception e){}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -