使用线程是不会阻塞,但是还是不知道一个指令在什么时候结束的呀。
因为读出的时候就是下面这个语句
while((line = in.readLine()) != null))
他无法区分出多个命令的多个输出在什么时候结束,什么时候开始.
而是有一个命令执行完了,就阻塞.
阻塞能够判断么?
因为读出的时候就是下面这个语句
while((line = in.readLine()) != null))
他无法区分出多个命令的多个输出在什么时候结束,什么时候开始.
而是有一个命令执行完了,就阻塞.
阻塞能够判断么?
当读入不为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
}
取结果的时候getOutputStream和getErrorOutputSteam(好像是叫这两个名字的吧)的信息都要取出!
while((while((line = in.readLine()) != null))
) != null))
与while(true){
line = in.readLine()
}没有什么区别,因为in.readLine()从不为null.
要么阻塞,要么读出数据。
因为读入不为null所以无法通过次来判断
是否结束读入线程。
我在第一层循环内加了个sleep
(我现在觉得该加wait)
in.readLine永远不为null
所以这里就真的不能这么写了
但楼上说可以获得process的状态
那么在
write()就可以判断这个状态
然后决定线程是wait,还是执行
当另一个状态到来时
先notify另一线程
再退出本线程
就是这样
if(process.某个状态为true)wait;
while(process.某个状态为true){
read()or write();
}
notify;