当前位置:编程学习 > JAVA >>

多线程读取同一个文件,有的线程读着读着就中止了。。。。。。

来龙去脉:
首先,调用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多线程执行试试。
另外,源码不多的话,发出来看看那? --------------------编程问答--------------------
引用 1 楼 oh_Maxy 的回复:
建议LZ不适用bat执行,使用java多线程执行试试。
另外,源码不多的话,发出来看看那?


这个改不了哇。。。,既存的你懂的

大神还需要什么信息,我贴出来 --------------------编程问答--------------------
引用 2 楼 feier00 的回复:
Quote: 引用 1 楼 oh_Maxy 的回复:

建议LZ不适用bat执行,使用java多线程执行试试。
另外,源码不多的话,发出来看看那?


这个改不了哇。。。,既存的你懂的

大神还需要什么信息,我贴出来

大家一起分析而已。。
从现象看,挺像出现干扰似的。。
嗯,能增加些日志打印不?还有异常打印。 --------------------编程问答-------------------- 建议同步一下,不要让多个进程并发执行一个文件 --------------------编程问答--------------------
引用 3 楼 oh_Maxy 的回复:
Quote: 引用 2 楼 feier00 的回复:

Quote: 引用 1 楼 oh_Maxy 的回复:

建议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 }
            }
        }
--------------------编程问答--------------------
引用 4 楼 wenhaoxp1987 的回复:
建议同步一下,不要让多个进程并发执行一个文件

但是只是读取应该没问题的呀 --------------------编程问答-------------------- 出个馊主意:不关闭资源,再跑一次试试 --------------------编程问答--------------------
引用 6 楼 feier00 的回复:
Quote: 引用 4 楼 wenhaoxp1987 的回复:

建议同步一下,不要让多个进程并发执行一个文件

但是只是读取应该没问题的呀
io源码没读过,但是我估计可能是在读取文件的时候共享了一个存储数据的东西,导致那个东西随时在变,导致多个线程访问有时是对的,有时是错的
补充:Java ,  Java EE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,