不好意思!!漏了类DThread!!补全的:
import java.io.*;
import java.util.Date;class ThreadMethods  //结果不对啊?????
{
public static void main(String[] args) throws IOException
{
PipedInputStream  pisFromAnn=new PipedInputStream();
PipedOutputStream posToTom=new PipedOutputStream(pisFromAnn); PipedInputStream pisFromTom=new PipedInputStream();
PipedOutputStream posToAnn=new PipedOutputStream(pisFromTom);

DThread Tom=new DThread (pisFromAnn,posToTom);
DataInputStream disFromTom=new DataInputStream(pisFromTom);
DataOutputStream dosToTom=new DataOutputStream(posToTom); System.out.println("Ann:Tom,你在做功课吗?"+Tom.isAlive());
System.out.println("Ann:Tom快做功课啦!");
Tom.start();
System.out.println("[Tom]"+disFromTom.readUTF());
System.out.println("Ann:Tom在做功课吗?"+Tom.isAlive());
try{
System.out.println("Ann:Tom还不快点做功课?");
Tom.start();
}
catch(IllegalStateException e){
System.out.println("Ann:哇!原来Tom已经在做功课了!");
dosToTom.writeUTF ("对不起.....我不是故意催你的....");
}
System.out.println("[Tom]"+disFromTom.readUTF());
System.out.println("Ann:Tom,先休息一下吧!! ");
Tom.interrupted();
System.out.println("Ann:Tom在做功课吗?"+Tom.isAlive());
System.out.println("Ann:Tom,可以继续做功课了....");
System.out.println("Ann:Tom在做功课吗?"+Tom.isAlive());
System.out.println("Ann:Tom好像是睡着了....");
System.out.println("Ann:现在的时刻是:"+(new Date()));
try{
Tom.join();
}
catch(InterruptedException e){}
System.out.println("Ann:Tom ,你终于睡醒了!");
System.out.println("Ann:现在已经是:"+(new Date()));
System.out.println("Ann:居然睡得这么久....");
}
} class DThread extends Thread{
private DataInputStream disFromAnn;
private DataOutputStream dosToAnn; DThread (PipedInputStream FromAnn,PipedOutputStream ToAnn){
super();
disFromAnn=new DataInputStream (FromAnn);
dosToAnn=new DataOutputStream (ToAnn);
}

public void run(){
try{
dosToAnn.writeUTF("等一下嘛!!...");
System.out.println("Tom:知道啦,我开始做功课了");
System.out.println("[Ann]"+disFromAnn.readUTF());
dosToAnn.writeUTF("好啦!,原谅你就是啦 !!...");
try{
System.out.println("Tom:啊...我困了..我睡一下下....");
sleep(5000);
}
catch(InterruptedException e){}
System.out.println("Tom:嗯,....睡得真舒服!");
}

catch(IOException e){}
}
}

解决方案 »

  1.   

    你的程序在sleep(5000)后产生异常,所以执行了System.out.println("Tom:嗯,....睡得真舒服!");我想可能和你的pipedstream有关系,api上也说最后不要在一个线程里同时用output和input,容易发生死锁.A piped input stream should be connected to a piped output stream; the piped input stream then provides whatever data bytes are written to the piped output stream. Typically, data is read from a PipedInputStream object by one thread and data is written to the corresponding PipedOutputStream by some other thread. Attempting to use both objects from a single thread is not recommended, as it may deadlock the thread. The piped input stream contains a buffer, decoupling read operations from write operations, within limits.
      

  2.   

    你的程序在sleep(5000)后产生异常,所以执行了System.out.println("Tom:嗯,....睡得真舒服!");我想可能和你的pipedstream有关系,api上也说最后不要在一个线程里同时用output和input,容易发生死锁.A piped input stream should be connected to a piped output stream; the piped input stream then provides whatever data bytes are written to the piped output stream. Typically, data is read from a PipedInputStream object by one thread and data is written to the corresponding PipedOutputStream by some other thread. Attempting to use both objects from a single thread is not recommended, as it may deadlock the thread. The piped input stream contains a buffer, decoupling read operations from write operations, within limits.