题目是:
用两个线程实现自动对话
线程与线程之间采用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
但按我的代码运行下来,却不是这样的结果,请问代码应该如何修改?
用两个线程实现自动对话
线程与线程之间采用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
但按我的代码运行下来,却不是这样的结果,请问代码应该如何修改?
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);
}
}