Java:频繁向同一个文件夹中写入、删除文件会有失败吗?
就不贴大段代码了,说一下解决需求时遇到的奇怪情况A线程不断向数据库写入数据,如果数据库断开则会将每条数据写成文件并放入reupload文件夹B线程每隔5秒扫描一次reup...
就不贴大段代码了,说一下解决需求时遇到的奇怪情况
A线程不断向数据库写入数据,如果数据库断开则会将每条数据写成文件并放入reupload文件夹
B线程每隔5秒扫描一次reupload文件夹,重新上传demo.txt文件->删除demo.txt->如果可以上传数据库则上传,如果数据库仍不能连接,则重新写成demo.txt
我在系统日志可以看到
A线程写入文件1.txt
A线程写入文件2.txt
A线程写入文件3.txt
A线程写入文件4.txt
A线程写入文件5.txt
B线程写入文件1.txt(缓存1.txt的内容后,删除1.txt,发现数据库还是不能连接,则重新生成1.txt)
A线程写入文件6.txt
A线程写入文件7.txt
但是现在的情况是,有时日志显示已经写了几百个文件,但是文件夹下却只有四五个文件=。=话说是不是两个线程频繁写入的时候会有冲突呢?我单步调试跟踪了下A、B线程发现单独写文件没有问题,将写文件这个公共方法加上synchronized仍然不行=。=
PS:1、为了查看这种状态,数据库一直就是关闭的2、单独开启A线程而不开启B线程可以看到文件数量符合预期的暴涨,但是B这个处理错误数据的线程也开启就出现上面情况了,但是我单步跟踪B线程的写文件过程发现写文件正常... 展开
A线程不断向数据库写入数据,如果数据库断开则会将每条数据写成文件并放入reupload文件夹
B线程每隔5秒扫描一次reupload文件夹,重新上传demo.txt文件->删除demo.txt->如果可以上传数据库则上传,如果数据库仍不能连接,则重新写成demo.txt
我在系统日志可以看到
A线程写入文件1.txt
A线程写入文件2.txt
A线程写入文件3.txt
A线程写入文件4.txt
A线程写入文件5.txt
B线程写入文件1.txt(缓存1.txt的内容后,删除1.txt,发现数据库还是不能连接,则重新生成1.txt)
A线程写入文件6.txt
A线程写入文件7.txt
但是现在的情况是,有时日志显示已经写了几百个文件,但是文件夹下却只有四五个文件=。=话说是不是两个线程频繁写入的时候会有冲突呢?我单步调试跟踪了下A、B线程发现单独写文件没有问题,将写文件这个公共方法加上synchronized仍然不行=。=
PS:1、为了查看这种状态,数据库一直就是关闭的2、单独开启A线程而不开启B线程可以看到文件数量符合预期的暴涨,但是B这个处理错误数据的线程也开启就出现上面情况了,但是我单步跟踪B线程的写文件过程发现写文件正常... 展开
展开全部
如果你是windows系统且版本高于xp,你先测试一下单线程循环:
1.flag = 1; create file "temp";
2.create file "test";
3.write flag to file "test";
4.++flag;
5.close file "test";
6.open file "test"; open file "temp",append
7.read from file "test" and write to file "temp";
8.close file "test"
9.delete file "test";
10.goto lable 2;
测试100+试试,你看看最后"temp"文件里面记录是不是连续递增的,看没有重复数据。
win7及以上版本频繁读写同一个文件很bug,相当bug。
1.flag = 1; create file "temp";
2.create file "test";
3.write flag to file "test";
4.++flag;
5.close file "test";
6.open file "test"; open file "temp",append
7.read from file "test" and write to file "temp";
8.close file "test"
9.delete file "test";
10.goto lable 2;
测试100+试试,你看看最后"temp"文件里面记录是不是连续递增的,看没有重复数据。
win7及以上版本频繁读写同一个文件很bug,相当bug。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询