Linux环境/home/test/a路径下有20个文本文件命名规则为R0*.824
File[] files = FileUtil.getFileList("/home/test/a", filter);
获得文件列表后,为每一个文件创建一个线层去逐行读取,发现会随机的个别线程会被阻塞住
最开始在run方法中读取文件的位置是这样写的:
BufferedReader br = null;
try{
br = new BuffererdReader(new FileReader(a));
while(true){
String line = br.readline();
if(line == null) break;
//to do
}
}catch(Exception e){}
}finally{
if(br != null){
try{
br.close();
}catch(IOException e){}
}
通过记录日志发现在readline处会在随机的文件上阻塞,导致文件不能继续读取。
遂采取第二中读取方案
FileInputStream in = null;
try {
in = new FileInputStream(sf);
StringBuffer sb = new StringBuffer("");
while (true) {
int i = in.read();
if(i == -1 ) break;
sb.append((char)i);
if(i == '\n'){
//to do
}
}
}catch(Exception e){}
}finally{
if (in != null) {
try {
in.close();
} catch (IOException e) {}
}
}
发现会在in.read()在随机的文件处阻塞。
这个问题困扰了我一个下午,最后只好单线程的循环处理这些文件,虽然文件不多也不大,效率亦能接受,但是实在是费解,各位高手请给小弟说说这是啥问题?
File[] files = FileUtil.getFileList("/home/test/a", filter);
获得文件列表后,为每一个文件创建一个线层去逐行读取,发现会随机的个别线程会被阻塞住
最开始在run方法中读取文件的位置是这样写的:
BufferedReader br = null;
try{
br = new BuffererdReader(new FileReader(a));
while(true){
String line = br.readline();
if(line == null) break;
//to do
}
}catch(Exception e){}
}finally{
if(br != null){
try{
br.close();
}catch(IOException e){}
}
通过记录日志发现在readline处会在随机的文件上阻塞,导致文件不能继续读取。
遂采取第二中读取方案
FileInputStream in = null;
try {
in = new FileInputStream(sf);
StringBuffer sb = new StringBuffer("");
while (true) {
int i = in.read();
if(i == -1 ) break;
sb.append((char)i);
if(i == '\n'){
//to do
}
}
}catch(Exception e){}
}finally{
if (in != null) {
try {
in.close();
} catch (IOException e) {}
}
}
发现会在in.read()在随机的文件处阻塞。
这个问题困扰了我一个下午,最后只好单线程的循环处理这些文件,虽然文件不多也不大,效率亦能接受,但是实在是费解,各位高手请给小弟说说这是啥问题?
解决方案 »
- 如何直接获取一个下载链接里的HTML
- 如何实现窗口的控件消息响应和自动隐藏?
- 人民币数字转化为文字,如1235怎么输出一千二百三十五元?
- 关于在windowsXP下运行java程序的问题
- 求助:无法通过JDBC向数据库增加记录
- 程序自升级里碰到的一个怪事,大家来看看是什么原因……
- 200分求帮,我的一个反射的程序,出现java.lang.IllegalArgumentException异常,麻烦大家给看看
- 刚加入,没带什么礼物,向大家推荐一个vc编程站点吧!
- java怎么读呀,我听了好几个版本了,好象和字典上不一样呀
- JAVA能和C++相比吗?能用JAVA开发现在市面上的游戏吗?比如:半条命、仙剑等?
- 编程之路怎样走?
- 关于java...苦ing...
而且我发现阻塞不是线程间发生了锁而彼此被锁住了,
而是发现InputStream在多个线程同时读多个文件的时候出现了阻塞。
我对每个File创建的线程单独处理,每个线程中都是创建新的inputstream或者是reader.to java2000_net
已经读到文件里了,没有文件尾,从打的日志来看从文件第一行就被阻塞了。