管道实现两个线程之间的IO读写输入输出内容共享
时间: 2024-02-11 11:08:24 浏览: 62
管道是一种基于输入/输出流的线程通信机制,可以实现线程之间的数据交换。在Java中,可以使用PipedInputStream和PipedOutputStream来实现管道的读写操作。
以下是一个简单的示例,实现了两个线程之间的IO读写输入输出内容共享:
```java
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
public class PipedCommunication {
public static void main(String[] args) throws IOException {
final PipedOutputStream pos = new PipedOutputStream();
final PipedInputStream pis = new PipedInputStream(pos);
Thread writerThread = new Thread(() -> {
try {
pos.write("Hello, world!".getBytes());
pos.close();
} catch (IOException e) {
e.printStackTrace();
}
});
Thread readerThread = new Thread(() -> {
try {
int data;
while ((data = pis.read()) != -1) {
System.out.print((char) data);
}
pis.close();
} catch (IOException e) {
e.printStackTrace();
}
});
writerThread.start();
readerThread.start();
}
}
```
在该示例中,首先创建了一个PipedOutputStream和一个PipedInputStream,并将它们连接起来。然后创建了一个写线程和一个读线程,分别使用PipedOutputStream和PipedInputStream进行数据的写入和读取。在写线程中,通过PipedOutputStream的write()方法向管道中写入数据;在读线程中,通过PipedInputStream的read()方法从管道中读取数据,并输出到控制台上。
需要注意的是,在使用管道进行线程通信时,必须保证读线程和写线程的启动顺序正确,否则可能会导致阻塞和死锁等问题。
阅读全文