线程间使用管道进行输入、输出

说明:

通过输入输出在线程间进行通信。提供线程功能的类库已“管道”的形式对线程间的输入输出提供支持。

Java中对应的类PipedWriter(允许线程在管道写)与PipedReader(允许不同线程从同一管道中读取)

这模型可以看做是生产者与消费者的变体



package com.t1009;


import java.io.IOException;
import java.io.PipedReader;
import java.io.PipedWriter;
import java.util.Random;

class Sender extends Thread {

    private Random rand = new Random();
    private PipedWriter out = new PipedWriter();

    public PipedWriter getPipedWriter() {
        return out;
    }

    @Override
    public void run() {
        while (true) {
            for (char c = 'A'; c <= 'z'; c++) {
                try {
                    System.out.println("把 "+c+" 写进去了");
                    out.write(c);
                    sleep(rand.nextInt(500));
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }

            }

        }

    }

}

class Receiver extends Thread {

    private PipedReader in;

    public Receiver(Sender sender) throws IOException {

        in = new PipedReader(sender.getPipedWriter());
    }

    @Override
    public void run() {

        try {

            while (true) {

                System.out.println("Read " + (char) in.read());

            }
        } catch (IOException e) {

            throw new RuntimeException(e);
        }
    }

}

public class PipedIO {

    public static void main(String[] args) throws IOException {
        Sender sender = new Sender();

        Receiver receiver = new Receiver(sender);
        
        
        sender.start();
        receiver.start();
        
    
    }

}

输出部分结果:


把 A 写进去了
把 B 写进去了
把 C 写进去了
把 D 写进去了
把 E 写进去了
把 F 写进去了
Read A
Read B
Read C
Read D
Read E
Read F
把 G 写进去了
把 H 写进去了
把 I 写进去了
把 J 写进去了
Read G
Read H
Read I
Read J
把 K 写进去了
把 L 写进去了
Read K
Read L
把 M 写进去了
把 N 写进去了
把 O 写进去了
把 P 写进去了
Read M
Read N
Read O
Read P
把 Q 写进去了
把 R 写进去了
把 S 写进去了
Read Q
Read R
Read S
把 T 写进去了
把 U 写进去了
把 V 写进去了
把 W 写进去了
Read T
Read U
Read V
Read W
把 X 写进去了
把 Y 写进去了
把 Z 写进去了
把 [ 写进去了
把 \ 写进去了
Read X
Read Y
Read Z
Read [
Read \
把 ] 写进去了
把 ^ 写进去了
把 _ 写进去了
把 ` 写进去了
把 a 写进去了
把 b 写进去了
Read ]
Read ^
Read _
Read `
Read a
Read b
把 c 写进去了
把 d 写进去了
Read c
Read d
把 e 写进去了
把 f 写进去了
把 g 写进去了
把 h 写进去了
Read e
Read f
Read g
Read h


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值