java线程通信-等待通知:通过管道进行线程通信

核心:
PipedInputStream
PipedOutputStream
PipedReader
PipedWriter
通过下面的方式进行管道连接.读取数据
PipedInputStream.connet(PipedOutputStream)

在这里插入图片描述

package com.hgh.java_duoxiancheng.ch3_1.p12;

import java.io.PipedOutputStream;

public class WriteData {

	public void write(PipedOutputStream pipedOutputStream){
		try {
			System.out.println("write:");
			for(int i = 0 ; i< 300 ; i ++){
				String outData =  "" + (i + 1);
				pipedOutputStream.write(outData.getBytes());
				System.out.println(outData);
			}
			System.out.println();
			pipedOutputStream.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

package com.hgh.java_duoxiancheng.ch3_1.p12;

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

public class ReadData {

	public void read(PipedInputStream pipedInputStream){
		try {
			System.out.println("read start");
		byte[] data = new byte[20];
		int len = -1;
			while((len = pipedInputStream.read(data)) != -1){
				String str = new String(data, 0, len);
				System.out.println(str);
			}
			pipedInputStream.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

package com.hgh.java_duoxiancheng.ch3_1.p12;

import java.io.PipedOutputStream;

public class ThreadWrite extends Thread{

	private WriteData writeData;
	private PipedOutputStream pipedOutputStream;
	ThreadWrite(WriteData writeData,PipedOutputStream pipedOutputStream){
		this.writeData = writeData;
		this.pipedOutputStream = pipedOutputStream;
	}
	
	@Override
	public void run() {
		writeData.write(pipedOutputStream);
	}
}

package com.hgh.java_duoxiancheng.ch3_1.p12;

import java.io.PipedInputStream;

public class ThreadRead extends Thread{

	private ReadData readData;
	private PipedInputStream pipedInputStream;
	ThreadRead(ReadData readData,PipedInputStream pipedInputStream){
		this.readData = readData;
		this.pipedInputStream = pipedInputStream;
	}
	
	@Override
	public void run() {
		readData.read(pipedInputStream);
	}
}

package com.hgh.java_duoxiancheng.ch3_1.p12;

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

public class Run {

	public static void main(String[] args) {
		ReadData readData = new ReadData();
		WriteData writeData = new WriteData();
		PipedInputStream pipedInputStream = new PipedInputStream();
		PipedOutputStream pipedOutputStream = new PipedOutputStream();
		try {
			pipedInputStream.connect(pipedOutputStream);
			ThreadRead threadRead = new ThreadRead(readData, pipedInputStream);
			ThreadWrite threadWrite = new ThreadWrite(writeData, pipedOutputStream);
			threadRead.start();
			threadWrite.start();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
}

猜你喜欢

转载自blog.csdn.net/y41992910/article/details/88638562