现在的位置: 首页 > 综合 > 正文

线程间通信

2012年09月26日 ⁄ 综合 ⁄ 共 1620字 ⁄ 字号 评论关闭

 

线程间使用管道进行输入输出,分别是PiperWriter和PiperReader,管道相当于是一个阻塞队列,调用read的时候,如果没有数据就自动阻塞。而且他和普通的I/o流比,它是可中断的。

class Sender extends Thread {
   
private PipedOutputStream out = new PipedOutputStream();
   
   
public PipedOutputStream getPipedOutputStream(){
       
return out;
    }
   
public void run(){
        String strSendInfo
= "KindAzrael!";
       
try {
            out.write(strSendInfo.getBytes());
            out.write(strSendInfo.getBytes());
        }
catch (IOException e) {
            System.out.println(
"No Receiver!");
            e.printStackTrace();
        }
    }
}

class Receiver extends Thread {
   
private PipedInputStream in = new PipedInputStream();
   
   
public PipedInputStream getPipedInputStream(){
       
return in;
    }
   
public void run(){
       
byte [] buf = new byte[11];
       
int len;
       
try {
            len
= in.read(buf);
            System.out.println(
new String(buf, 0, len));
            len
= in.read(buf);
            System.out.println(
new String(buf, 0, len));           
           
//System.out.println("Here");
        } catch (IOException e) {
            System.out.println(
"No Sender!");
            e.printStackTrace();
        }
    }
}

    public void testPipeStream(){
        Sender tSender
= new Sender();
        Receiver tReceiver
= new Receiver();
        PipedOutputStream out
= tSender.getPipedOutputStream();
        PipedInputStream in
= tReceiver.getPipedInputStream();
       
       
try {
            in.connect(out);
        }
catch (IOException e) {
            System.out.println(
"Cann't Connect!");
            e.printStackTrace();
        }
        tReceiver.start();
       
try {
            Thread.sleep(
5000);
        }
catch (InterruptedException e) {
            e.printStackTrace();
        }
        tSender.start();
    }

抱歉!评论已关闭.