我有一个非常简单的问题。
基于Java I/O方案,每当一个线程在等待一些数据时,它会被阻塞吗?是真的吗?像这样的东西。
byte[] _buff=new byte[1024];
int _r=_in.read(_buff);//it blocks until some data is available
放弃阅读的唯一可能方法是通过另一个线程关闭流,对吗?像这样的东西。
void run(){
_in.close();
}
所以如果我对上述情况是正确的,那么为什么这是不可能的,只需System.in
通过关闭流来中断正在读取的线程。我运行一个只等待 5 秒的线程,然后想要中断/放弃从流中读取的其余部分。
void _read_data(){
System.out.print("enter y to save the workspace ");
new Thread(_cancel_thread).start();
int _r=System.in.read();//blocks
}
///////////
void run(){
try{
Thread.sleep(5000);
System.in.close();//doesn't work.
}catch(Exception _ex){}
}
问题:
1.如何关闭流?!为什么关闭流线程不能关闭流?!
2.流关闭后,如何再次打开?!