執行緒間的協作(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
}
}
}
相關文章
- 執行緒間協作執行緒
- linux中的輸入與輸出管理(重定向輸入,輸出,管道符)Linux
- 輸入輸出流
- Java 輸入輸出流Java
- 執行緒間的協作機制執行緒
- IO流的位元組輸入輸出流(InputStream,OutputStream)
- 重學java中的輸入輸出流Java
- 手撕Java多執行緒(四)執行緒之間的協作Java執行緒
- 詳解Java中的IO輸入輸出流!Java
- 輸出重定向 管道
- C++輸出流cout的執行順序問題C++
- [java IO流]之 基本資料型別輸入輸出流Java資料型別
- 演算法題---五個執行緒排序輸出演算法執行緒排序
- 檔案輸入輸出處理(二)-位元組流
- [java IO流]之 鍵盤顯示器輸入輸出流(System)Java
- 輸入輸出
- C# 的輸入輸出,(同一行/換行)C#
- Mac監控鍵盤輸入並執行動作Mac
- 執行緒間協作-《thinking in java》讀書筆記(一)執行緒ThinkingJava筆記
- 資料的輸入輸出
- 023--C++養成之路(io流:流的初始化以及基本的輸入輸出)C++
- 可傳輸執行緒本地簡介執行緒
- 015 Linux 標準輸入輸出、重定向、管道和後臺啟動程式命令Linux
- RT_Thread ps指令 輸出執行緒名字顯示不全thread執行緒
- laravel列印輸出完整sql,執行時間和explain分析LaravelSQLAI
- ACM的Python版輸入輸出ACMPython
- C++名稱空間、標準輸入輸出、引用C++
- 1.輸入輸出
- 【C++】輸入輸出C++
- 輸入輸出系統
- shell——shell輸入輸出
- 執行緒間的協作(2)——生產者與消費者模式執行緒模式
- 資料流輸出
- 如何把檔案輸出流替換成位元組輸出流
- android基礎學習-java篇day10-step3-第六節:java輸入輸出流AndroidJava
- Python資料的輸入與輸出Python
- Java------簡單的輸入/輸出Java
- AUTOCAD——圖形的輸入與輸出