欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java管道流實(shí)現(xiàn)線程間通信過程解析

 更新時(shí)間:2020年03月20日 11:28:18   作者:lkc9  
這篇文章主要介紹了Java管道流實(shí)現(xiàn)線程間通信過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

管道流

在Java語(yǔ)言中提供了各種各樣的輸入/輸出流 Stream ,使我們能夠很方便地對(duì)數(shù)據(jù)進(jìn)行操作,其中管道流是一種特殊的流,用于在不同線程間直接傳送數(shù)據(jù)。一個(gè)線程發(fā)送數(shù)據(jù)到輸出管道流,另一個(gè)線程從輸入管道流中讀取數(shù)據(jù)。

通過使用管道,實(shí)現(xiàn)不同線程間的通信,而無(wú)須借助于類似臨時(shí)文件之類的東西。

字節(jié)流

PipedInputStream 和 PipedOutputStream

字符流

PipedReader 和 PipedWriter

示例

public class PipeStreamTest {
  public static void main(String[] args) throws IOException, InterruptedException {
    WriteData writeData = new WriteData();
    ReadData readData = new ReadData();

    PipedReader reader = new PipedReader();
    PipedWriter writer = new PipedWriter();

    writer.connect(reader);

    new Thread(() -> {
      writeData.writeMethod(writer);
    }).start();

    Thread.sleep(2000);

    new Thread(() -> {
      readData.readMethod(reader);
    }).start();
  }

  static class WriteData {
    public void writeMethod(PipedWriter writer) {
      try {
        System.out.println("write :");
        for (int i = 0; i < 300; i++) {
          String outData = "" + (i + 1);
          writer.write(outData);
          System.out.print(outData);
        }
        System.out.println();
        writer.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }

  static class ReadData {
    public void readMethod(PipedReader reader) {
      try {
        System.out.println("read :");
        char[] byteArray = new char[20];
        int readLength = reader.read(byteArray);
        while (readLength != -1) {
          String newData = new String(byteArray, 0, readLength);
          System.out.print(newData);
          readLength = reader.read(byteArray);
        }
        System.out.println();
        reader.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }
}

運(yùn)行結(jié)果如下:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • ThreadLocal內(nèi)存泄漏常見要點(diǎn)解析

    ThreadLocal內(nèi)存泄漏常見要點(diǎn)解析

    這篇文章主要介紹了ThreadLocal內(nèi)存泄漏常見要點(diǎn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • java中response對(duì)象用法實(shí)例分析

    java中response對(duì)象用法實(shí)例分析

    這篇文章主要介紹了java中response對(duì)象用法,結(jié)合實(shí)例形式分析了Java中response對(duì)象的功能及具體使用技巧,需要的朋友可以參考下
    2015-12-12
  • 完美解決gson將Integer默認(rèn)轉(zhuǎn)換成Double的問題

    完美解決gson將Integer默認(rèn)轉(zhuǎn)換成Double的問題

    下面小編就為大家?guī)?lái)一篇完美解決gson將Integer默認(rèn)轉(zhuǎn)換成Double的問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2017-03-03
  • JVM的垃圾回收算法工作原理詳解

    JVM的垃圾回收算法工作原理詳解

    這篇文章主要介紹了JVM的垃圾回收算如何判斷對(duì)象是否可以被回收,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下
    2019-06-06
  • 深入理解Java中的構(gòu)造函數(shù)引用和方法引用

    深入理解Java中的構(gòu)造函數(shù)引用和方法引用

    java構(gòu)造函數(shù),也叫構(gòu)造方法,是java中一種特殊的函數(shù)。函數(shù)名與相同,無(wú)返回值。方法引用是用來(lái)直接訪問類或者實(shí)例的已經(jīng)存在的方法或者構(gòu)造方法。下面我們來(lái)詳細(xì)了解一下它們吧
    2019-06-06
  • 用Java編寫經(jīng)典小程序

    用Java編寫經(jīng)典小程序

    非常實(shí)用的12種基礎(chǔ)算法的經(jīng)典案例,對(duì)于初學(xué)者來(lái)說(shuō)有很大的幫助,數(shù)量有限需要的朋友可以參考下
    2018-04-04
  • 關(guān)于MyBatis plus條件構(gòu)造器的逐條詳解

    關(guān)于MyBatis plus條件構(gòu)造器的逐條詳解

    什么是條件構(gòu)造器呢?簡(jiǎn)單來(lái)說(shuō),條件構(gòu)造器就是用來(lái)生成我們查數(shù)據(jù)庫(kù)的sql。它可以簡(jiǎn)化sql代碼的編寫,靈活、方便且易于維護(hù)
    2021-09-09
  • 解決MyBatis返回結(jié)果類型為Boolean的問題

    解決MyBatis返回結(jié)果類型為Boolean的問題

    這篇文章主要介紹了解決MyBatis返回結(jié)果類型為Boolean的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2020-11-11
  • SpringBoot整合rabbitMq自定義消息轉(zhuǎn)換方式

    SpringBoot整合rabbitMq自定義消息轉(zhuǎn)換方式

    這篇文章主要介紹了SpringBoot整合rabbitMq自定義消息轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • java 語(yǔ)句塊的使用詳解及實(shí)例

    java 語(yǔ)句塊的使用詳解及實(shí)例

    這篇文章主要介紹了java 用語(yǔ)句塊的正確方法實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-01-01

最新評(píng)論