多线程读取同一个文件,有的线程读着读着就中止了。。。。。。
来龙去脉:首先,调用bat,bat去访问一个implements Runnable的类,在run方法有个方法就是要读取这个文件的。
读的过程:
Reader reader = new InputStreamReader(new FileInputStream(myFile.getAbsolutePath())
//MyFilter extends FilterReader
MyFilter filter = new MyFilter(myParam);
filter.connect(reader);
OutputStreamWriter osw = new OutputStreamWriter(
new FileOutputStream(tempFile.getAbsolutePath()), "utf-8");
br = new BufferedReader(filter);
String buff = "";
while ((buff = br.readLine()) != null) {
if (buff.equals("")) {
continue;
}
osw.write(buff);
osw.flush();
}
反复去执行这个bat,就相当于同时有10几个线程在读取文件,有的读出的结果跟源文件一样,有的内容就不全,中断了,而且在中断的地方还有小黑点,类似乱码的东西。
不知道怎么回事 --------------------编程问答-------------------- 建议LZ不适用bat执行,使用java多线程执行试试。
另外,源码不多的话,发出来看看那? --------------------编程问答--------------------
这个改不了哇。。。,既存的你懂的
大神还需要什么信息,我贴出来 --------------------编程问答--------------------
大家一起分析而已。。
从现象看,挺像出现干扰似的。。
嗯,能增加些日志打印不?还有异常打印。 --------------------编程问答-------------------- 建议同步一下,不要让多个进程并发执行一个文件 --------------------编程问答--------------------
建议LZ不适用bat执行,使用java多线程执行试试。
另外,源码不多的话,发出来看看那?
这个改不了哇。。。,既存的你懂的
大神还需要什么信息,我贴出来
大家一起分析而已。。
从现象看,挺像出现干扰似的。。
嗯,能增加些日志打印不?还有异常打印。
我在osw.write(buff);
osw.flush();
后加了log打印,catch里也加了,log显示读到某一行后,没走catch,直接走finally。
finally {--------------------编程问答--------------------
if (osw != null) {
try {
osw.flush();
osw.close();
} catch (Exception ex) {打印log }
}
if (br != null) {
try {
br.close();
} catch (Exception ex) {打印log }
}
}
建议同步一下,不要让多个进程并发执行一个文件
但是只是读取应该没问题的呀 --------------------编程问答-------------------- 出个馊主意:不关闭资源,再跑一次试试 --------------------编程问答--------------------
建议同步一下,不要让多个进程并发执行一个文件
但是只是读取应该没问题的呀
补充:Java , Java EE