使用线程是不会阻塞,但是还是不知道一个指令在什么时候结束的呀。
因为读出的时候就是下面这个语句
while((line = in.readLine()) != null))
他无法区分出多个命令的多个输出在什么时候结束,什么时候开始.
而是有一个命令执行完了,就阻塞.
阻塞能够判断么?

解决方案 »

  1.   

    用一个信号量呢?
    当读入不为null时
    这个信号量为读入线程拥有
    写入线程被阻塞
    读入为null
    读入线程结束一次循环
    sleep()
    启动写入线程
    大概的样子是这样
    object semaphore;
    thread writer
    run(){
       while(true){
          write();
          sleep();
       }
    }
    thread read
    run(){
       while(true){
          read();
          sleep();
       }
    }
    write()
    public synchronized void write(){
    System.out.println("write");                  
    this.notify();
    //write something
    }
      

  2.   

    在每道DOS命令前都加入 cmd/k,如 cmd/k dir,cmd/k md newDir
    取结果的时候getOutputStream和getErrorOutputSteam(好像是叫这两个名字的吧)的信息都要取出!
      

  3.   

    我觉得这个语句
    while((while((line = in.readLine()) != null))
    ) != null))
    与while(true){
       line = in.readLine()
    }没有什么区别,因为in.readLine()从不为null.
    要么阻塞,要么读出数据。
    因为读入不为null所以无法通过次来判断
    是否结束读入线程。
      

  4.   

    你可以得到 process 的状态信息
      

  5.   

    这里还是有区别的吧
    我在第一层循环内加了个sleep
    (我现在觉得该加wait)
    in.readLine永远不为null
    所以这里就真的不能这么写了
    但楼上说可以获得process的状态
    那么在
    write()就可以判断这个状态
    然后决定线程是wait,还是执行
    当另一个状态到来时
    先notify另一线程
    再退出本线程
    就是这样
    if(process.某个状态为true)wait;
    while(process.某个状态为true){
       read()or write();
    }
    notify;
      

  6.   

    说说process可以得到什么状态信息,他不就那么几个函数么?