参考:实践 1-2:多线程读写文件 - l.w.x - 博客园 (cnblogs.com)
得到的结论是,可以多线程读写,但是会有多种情况:
-
多线程同时读同一个文件,在这种情况下并不会造成冲突
-
多线程同时写同一个文件,会造成写数据丢失
-
多线程同时对同一个文件进行写和读,会造成脏读
解决办法是加锁,同时需要注意两方面:
- 加锁,应该是对关键的读写过程加锁,对其它业务代码不包含。并且如果都是读过程,那么不加锁
- 短时间打开多个文件对象,会造成严重的资源消耗,最终卡顿。解决办法是:
- 为了可用性,控制打开的文件的个数,以及频率
- 及时调用close关闭文件对象
- 还可以对文件对象复用,但需要注意其指针位置
- 除了直接的文件对象,与之相关的字符串和对象也要注意及时赋值为None销毁,或者考虑复用。java中可以考虑stringbuffer或stringbuilder动态str类型