java IO 管道流 关于两个线程通信的问题

管道流

管道流主要可以进行两个线程之间的通信。

PipedOutputStream 管道输出流

PipedInputStream 管道输入流

send类:负责消息发送

package wgl.message;

import java.io.IOException;
import java.io.PipedOutputStream;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class Send implements Runnable{

	private String message;
	private int counter ;
	
	private PipedOutputStream output ;
	public Send(PipedOutputStream out ,String message){
		output = out;
		this.message = message;
		this.counter = 1;
	}
	@Override
	public void run() {
		
		Timer timer = new Timer();
		timer.schedule(new TimerTask() {
			
			@Override
			public void run() {
				if(counter==15){
					
				}
				sendMessage("第"+(counter++)+"次:"+message);
			}
		},new Date(), 2000);
	}
	
	public void sendMessage(String message){

		try {
			System.out.println("发送的内容:"+message);
			output.write(message.getBytes());
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
	
	public String getMessage() {
		return message;
	}
	
	public PipedOutputStream getOutput() {
		return output;
	}

}


Recive 类 :负责消息接收

package wgl.message;

import java.io.IOException;
import java.io.PipedInputStream;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class Recieve implements
 Runnable{

	private PipedInputStream in;
	
	public Recieve(PipedInputStream in){
		this.in = in;
	}
	@Override
	public void run() {

		Timer timer = new Timer();
		timer.schedule(new TimerTask() {
			
			@Override
			public void run() {
				recieved();
			}
		},new Date(), 200);
	}
	
	public void recieved(){
		byte[] b = new byte[1000];
		int len = 0;
		try {
			len = this.in.read(b);
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println("接受的内容:"+new String(b, 0, len));
	}
	public PipedInputStream getIn() {
		return in;
	}

}


Connect :测试类 测试两个线程通信

package wgl.message;

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

public class Connect {
	
	public static void main(String[] args) throws IOException{
		PipedOutputStream out = new PipedOutputStream();
		PipedInputStream in  = new PipedInputStream();
		final Send send = new Send(out,"你好!");
		final Recieve recieve = new Recieve(in);
		send.getOutput().connect(recieve.getIn());
		Thread t1 = new Thread(send);
		Thread t2 = new Thread(recieve);
		t1.start();
		t2.start();

	}
}

【运行结果】:

发送的内容:第1次:你好!
接受的内容:第1次:你好!
发送的内容:第2次:你好!
接受的内容:第2次:你好!
发送的内容:第3次:你好!
接受的内容:第3次:你好!
发送的内容:第4次:你好!
接受的内容:第4次:你好!

......





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值