import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;public class TestPip { public static void main(String[] args) {
PipedInputStream pis = new PipedInputStream();
PipedOutputStream pos = new PipedOutputStream();
try {
pis.connect(pos);//连接
} catch (IOException e) {
e.printStackTrace(); }
new Sender(pos).start();
new Ser(pis).start();
}
}class Sender extends Thread{
private PipedOutputStream pos;
public Sender(PipedOutputStream pos){
this.pos = pos;
}
public void run(){
byte buf[] = new byte[1024];
try {
pos.write("Hello word".getBytes());
pos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class Ser extends Thread{
private PipedInputStream pis;
public Ser(PipedInputStream pis){
this.pis = pis;
}
public void run(){
byte buf[] = new byte[1024];
try {
int len = pis.read(buf);
System.out.println(new String(buf,0,len)+"\n How do you");
} catch (IOException e) {
e.printStackTrace();
}
}
}private PipedOutputStream pos;
public Sender(PipedOutputStream pos){
this.pos = pos;
}
上面的代码我不是很理解,他跟构造方法有什么联系没?,请详细的给我说下。谢谢!new Sender(pos).start();
new Ser(pis).start();
还有上面的代码,他这样就算线程通信吗?

解决方案 »

  1.   

    管道输入流应该连接到管道输出流;管道输入流提供要写入管道输出流的所有数据字节。通常,数据由某个线程从 PipedInputStream 对象读取,并由其他线程将其写入到相应的 PipedOutputStream。不建议对这两个对象尝试使用单个线程,因为这样可能死锁线程。管道输入流包含一个缓冲区,可在缓冲区限定的范围内将读操作和写操作分离开。如果向连接管道输出流提供数据字节的线程不再存在,则认为该管道已损坏。 
    可以将管道输出流连接到管道输入流来创建通信管道。管道输出流是管道的发送端。通常,数据由某个线程写入 PipedOutputStream 对象,并由其他线程从连接的 PipedInputStream 读取。不建议对这两个对象尝试使用单个线程,因为这样可能会造成该线程死锁。如果某个线程正从连接的管道输入流中读取数据字节,但该线程不再处于活动状态,则该管道被视为处于 毁坏 状态。
      

  2.   

        private PipedOutputStream pos;
        public Sender(PipedOutputStream pos){
            this.pos = pos;
        }
    上面的代码我不是很理解,他跟构造方法有什么联系没?,请详细的给我说下。谢谢! 
    这个不就是构造方法么?
      

  3.   

    构造方法是 和 class同名的方法
      

  4.   

    class Sender extends Thread{
        private PipedOutputStream pos【1】;
        public Sender(PipedOutputStream pos【2】){
            this.pos【3】 = pos【4】;
        }
        ******
    }
    这里的Sender(PipedOutputStream pos)就是这个类的构造方法,这个类在实例化的时候,就会自动调用这个构造方法。【2】【4】pos 代表的是 
    public static void main(String[] args) {
         PipedInputStream pis = new PipedInputStream();
         PipedOutputStream pos = new PipedOutputStream();
         *******
    }
     主方法 里面的pos ;【1】【3】pos 代表的是 
    class Sender extends Thread 中定义的pos ;new Sender(pos).start();就是实例化一个Sender并且启用这个线程,里面的“pos”会当做参数传到上面所说的那个构造函数里面,通过this.pos = pos 就把 主方法 里面的pos传给了Sender类