线程利用管道字节(字符)流进行通信

本文介绍了一个使用Java的PipedInputStream和PipedOutputStream实现线程间通信的例子。通过创建两个线程,一个负责写入数据,另一个负责读取数据,展示了如何利用管道流进行线程间的同步数据交换。

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

<span style="font-size:18px;"><strong>package ThreadStreamChar;

import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedReader;
import java.io.PipedWriter;

public class ThreadInputStream extends Thread{
	
	private PipedReader pripeReader;
	
	private ServiceReader read;
	
	public ThreadInputStream(PipedReader pripeReader, ServiceReader read){
		this.pripeReader = pripeReader;
		this.read = read;
	}
	
	public void run(){
		try {
			read.read(pripeReader);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}





package ThreadStreamChar;

import java.io.IOException;
import java.io.PipedOutputStream;
import java.io.PipedWriter;

public class ThreadOutPutStream extends Thread{
	
	private PipedWriter pripeWriter;
	private ServiceWiter write;
	
	public ThreadOutPutStream(PipedWriter pripeWriter, ServiceWiter write){
		this.pripeWriter = pripeWriter;
		this.write = write;
	}
	
	public void run(){
		try {
			write.write(pripeWriter);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}




package ThreadStreamChar;

import java.io.IOException;
import java.io.PipedOutputStream;
import java.io.PipedWriter;

public class ServiceWiter {
	private PipedWriter pipeWriter;

	public ServiceWiter(PipedWriter pipeWriter) {
		this.pipeWriter = pipeWriter;
	}

	public void write(PipedWriter pipeWriter) throws IOException {
		String str = "hello world haha";
		for(int i=0;i<100;i++){
			pipeWriter.write((str+i));
		}
		pipeWriter.close();
		
	}
}




package ThreadStreamChar;

import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedReader;

public class ServiceReader {
	private PipedReader pripeReader;
	
	
	public ServiceReader(PipedReader pripeReader){
		this.pripeReader = pripeReader;
	}
	
	public void read(PipedReader pripeReader) throws IOException{
//		byte b[] = new byte[1024];
		char cha[] = new char[1024];
		int length = pripeReader.read(cha);
		
		while(-1 != length){
			String str = new String(cha,0,length);
			System.out.print(str);
			length = pripeReader.read(cha);
		}
		
		pripeReader.close();	
	}
}





package ThreadStreamChar;

import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import java.io.PipedReader;
import java.io.PipedWriter;

import PAndCMany.P;

public class TestMain {
	public static void main(String[] args) throws IOException, InterruptedException {
		
//		PipedInputStream pipeInput = new PipedInputStream();
//		
//		PipedOutputStream pipeOutput = new PipedOutputStream();
		
		PipedReader pripeReader = new PipedReader();
		
		PipedWriter pripeWriter = new PipedWriter();
		
		pripeReader.connect(pripeWriter);
		
		ServiceReader read = new ServiceReader(pripeReader);
		
		ServiceWiter wite = new ServiceWiter(pripeWriter);
		
		ThreadInputStream threadInput = new ThreadInputStream(pripeReader, read);
		
		ThreadOutPutStream threadOutput = new ThreadOutPutStream(pripeWriter, wite);
		
		threadOutput.start();
		
		Thread.sleep(300);
		threadInput.start();
		
	}
}

</strong></span>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值