執行緒間的協作(3)——管道輸入/輸出流
1.管道輸入/輸出流類
分為兩類,位元組流管道類(PipedInputStream/PipedOutputStream)和字元流管道類(PipedReader/ PipedWriter)。這兩個IO流實現了可以在不同的任務中對同一個管道進行讀寫操作,這個模型可以看成是“生產者消-費者模式”的變體,管道是一個阻塞佇列。
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import java.io.PipedReader;
import java.io.PipedWriter;
import java.util.Scanner;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class PipeIO {
public static void main(String[] args) {
ReadPipe read=new ReadPipe();
WritePipe write=new WritePipe();
ExecutorService exec=Executors.newCachedThreadPool();
try {
write.getWriter().connect(read.getRead());;//必須將兩個管道進行連線,然後才可進行執行緒間的資料互動
exec.execute(read);
exec.execute(write);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class ReadPipe implements Runnable{
PipedReader read=new PipedReader();
public PipedReader getRead(){
return read;
}
@Override
public void run() {
try {
while(true){
System.out.println("read:"+(char)read.read()+";");//當前執行緒從管道讀取資料
}
} catch (IOException e) {
// TODO: handle exception
}
}
}
class WritePipe implements Runnable{
PipedWriter writer=new PipedWriter();
public PipedWriter getWriter(){
return writer;
}
@Override
public void run() {
try {
while(true){
for(char a=`A`;a<=`z`;a++){
writer.write(a);//當前執行緒向管道輸出資料
TimeUnit.SECONDS.sleep(2);
}
}
} catch (IOException e) {
// TODO: handle exception
}catch (InterruptedException e) {
// TODO: handle exception
}
}
}
相關文章
- C++中的檔案輸入/輸出(3):掌握輸入/輸出流 (轉)C++
- 輸入輸出流
- 執行緒間協作執行緒
- linux中的輸入與輸出管理(重定向輸入,輸出,管道符)Linux
- Java 輸入輸出流Java
- JAVA輸入輸出流Java
- 執行緒間的協作機制執行緒
- c++入門:輸入輸出流C++
- IO流的位元組輸入輸出流(InputStream,OutputStream)
- 重學java中的輸入輸出流Java
- 手撕Java多執行緒(四)執行緒之間的協作Java執行緒
- [C++]輸入/輸出流類庫C++
- 詳解Java中的IO輸入輸出流!Java
- java中基本輸入輸出流的解釋Java
- 執行緒間協作——wait、notify、notifyAll執行緒AI
- Java中資料輸入輸出流——DataInputStream和DataOutputStreamJavaAI
- [java IO流]之 基本資料型別輸入輸出流Java資料型別
- C++輸出流cout的執行順序問題C++
- [java IO流]之 鍵盤顯示器輸入輸出流(System)Java
- C++ 中輸入輸出流及檔案流操作筆記C++筆記
- 檔案輸入輸出處理(二)-位元組流
- 【Java基礎知識】IO流--標準輸入輸出流、列印流PrintStreamJava
- 輸入輸出
- 演算法題---五個執行緒排序輸出演算法執行緒排序
- C# 的輸入輸出,(同一行/換行)C#
- Mac監控鍵盤輸入並執行動作Mac
- 資料的輸入輸出
- Python的輸入輸出Python
- SQLPLUS執行輸出SQL
- 資料流輸出
- 【C++】輸入輸出C++
- 輸入輸出系統
- 執行緒間協作-《thinking in java》讀書筆記(一)執行緒ThinkingJava筆記
- C++名稱空間、標準輸入輸出、引用C++
- 如何把檔案輸出流替換成位元組輸出流
- 專案時間管理各過程的輸入輸出關係
- laravel列印輸出完整sql,執行時間和explain分析LaravelSQLAI
- 執行緒間的協作(2)——生產者與消費者模式執行緒模式