有一个IO流close(),其他流是不是也就不能用这个资源了?
比如在多个类里用了Scanner键盘输入,有一个Scanner实例close(),其他的实例就不能再扫描键盘输入了
首先Scanner类默认实现是不支持多线程的,另外你的测试代码是有问题的
import java.util.*;
public class ScannerTest{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
Scanner qwe = new Scanner(System.in);
sc.close();
//加上这句
qwe.nextLine();
while(qwe.hasNext()){
System.out.println(qwe.next());
}
}
}
经测试报了一个NoSuchElementException,通过调试得知。Scanner对象里有一个source属性,这个可以理解为System.in,是一种资源,source下
有个bufferInputStream。发现sc.close()执行后,qwe的bufferInputStream为null,因此才报了上面的异常。
可以得出,在一个线程中,如果有多个Scanner对象,一旦有某个scanner对象执行了close方法,其他对象也就无法正常使用了.
不过可以用多线程的方法,来实现针对同一资源,可以同时打开多个IO流。这块自己谷歌。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。