题目是:
用两个线程实现自动对话
线程与线程之间采用PippedStream进行通信
对话的过程通过System.out输出import java.io.*;
import java.lang.*;public class Doctor extends Thread {
    private String name;
    private InputStream in;
    private OutputStream out;
    
    /** Creates a new instance of Doctor */
    public Doctor(String name,InputStream in,OutputStream out) {
        this.name=name;
        this.in=in;
        this.out=out;
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws Exception {
        // TODO code application logic here
        PipedInputStream sin1=new PipedInputStream();
        PipedOutputStream sout1=new PipedOutputStream(sin1);
        PipedInputStream sin2=new PipedInputStream();
        PipedOutputStream sout2=new PipedOutputStream(sin2);
        Doctor dr1=new Doctor("Wang",sin1,sout2);
        Doctor dr2=new Doctor("Zhang",sin2,sout1);        dr1.start();
        dr2.start();
    }
    public void run(){
        try{
            talk(in,out);
        }catch(Exception e){
        }
        
    }
    public void talk(InputStream in,OutputStream out) throws Exception{      
        BufferedReader rd=new BufferedReader(new InputStreamReader(in));
        PrintWriter pw=new PrintWriter(new OutputStreamWriter(out),true);
        pw.println(name+" Hello");
        while(true){  
            String question=rd.readLine();
            reply(pw,question);
            
        }
    }
    private void reply(PrintWriter out,String question) throws Exception{
        Thread.sleep((int)Math.random()*1000);
        String str=question.substring(question.indexOf(":")+1);
        out.println(name+":"+question);
        System.out.println(name+":"+str);       
    }
    
}
最后输出的是一个这样的循环效果:
Zhang:Wang Hello
Wang:Wang Hello
Zhang:Zhang Hello
Wang:Zhang Hello
Zhang:Wang Hello
Wang:Wang Hello
Zhang:Zhang Hello
Wang:Zhang Hello
但按我的代码运行下来,却不是这样的结果,请问代码应该如何修改?

解决方案 »

  1.   

    import java.io.*;
    import java.lang.*;public class Doctor extends Thread {
        private String name;
        private InputStream in;
        private OutputStream out;
        
        /** Creates a new instance of Doctor */
        public Doctor(String name,InputStream in,OutputStream out) {
            this.name=name;
            this.in=in;
            this.out=out;
        }
        
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) throws Exception {
            // TODO code application logic here
            PipedInputStream sin1=new PipedInputStream();
            PipedOutputStream sout1=new PipedOutputStream(sin1);
            PipedInputStream sin2=new PipedInputStream();
            PipedOutputStream sout2=new PipedOutputStream(sin2);
            Doctor dr1=new Doctor("Wang",sin1,sout2);
            Doctor dr2=new Doctor("Zhang",sin2,sout1);        dr1.start();
            dr2.start();
        }
        public void run(){
            try{
                talk(in,out);
            }catch(Exception e){
            }
            
        }
        public void talk(InputStream in,OutputStream out) throws Exception{      
            BufferedReader rd=new BufferedReader(new InputStreamReader(in));
            PrintWriter pw=new PrintWriter(new OutputStreamWriter(out),true);        pw.println(name+" Hello");
            while(true){  
                String question=rd.readLine();
                reply(pw,question);
                
            }
        }
        private void reply(PrintWriter out,String question) throws Exception{
            Thread.sleep((int)(Math.random()*1000));
            String str=question.substring(question.indexOf(":")+1);
            out.println(name+":"+str);//这里错了!
            System.out.println(name+":"+str);       
        }
        
    }