首页 > 其他分享 >多线程读写文件

多线程读写文件

时间:2023-04-28 14:12:05浏览次数:32  
标签:文件 加锁 同一个 对象 读写 多线程

参考:实践 1-2:多线程读写文件 - l.w.x - 博客园 (cnblogs.com)

得到的结论是,可以多线程读写,但是会有多种情况:

  • 多线程同时读同一个文件,在这种情况下并不会造成冲突

  • 多线程同时写同一个文件,会造成写数据丢失

  • 多线程同时对同一个文件进行写和读,会造成脏读

解决办法是加锁,同时需要注意两方面:

  • 加锁,应该是对关键的读写过程加锁,对其它业务代码不包含。并且如果都是读过程,那么不加锁
  • 短时间打开多个文件对象,会造成严重的资源消耗,最终卡顿。解决办法是:
    • 为了可用性,控制打开的文件的个数,以及频率
    • 及时调用close关闭文件对象
    • 还可以对文件对象复用,但需要注意其指针位置
    • 除了直接的文件对象,与之相关的字符串和对象也要注意及时赋值为None销毁,或者考虑复用。java中可以考虑stringbuffer或stringbuilder动态str类型

标签:文件,加锁,同一个,对象,读写,多线程
From: https://www.cnblogs.com/wd404/p/17361954.html

相关文章

  • double转为整型intValue()及sha1在线文件获取,文件都有一个唯一的sha1;jQuery事件方法;
    double转为整型intValue()及sha1在线文件获取,文件都有一个唯一的sha1Doubleindust=RankConstant.INIT_RADIO;indust.intValue()double由100.0---->100整型1.intValue()是java.lang.Number类的方法,Number是一个抽象类。Java中所有的数值类都继承它。也就是说,不单是Integer有int......
  • 深入jar包:从jar包中读取资源文件
    我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等)。在单独运行的时候这些简单的处理当然不会有问题。但是,如果我们把代码打成一个jar包以后,即使将资源文件一并打包,这些东西也找不出来了。看看下面的代码:Java代码 //源代码1:packageedu.hxraid;import......
  • 《Effective C#》系列之(六)——提高多线程的性能
    一、综述《EffectiveC#》中提高多线程性能的方法主要有以下几点:避免锁竞争:锁的使用会导致线程阻塞,从而影响程序的性能。为了避免锁竞争,可以采用无锁编程技术,如CAS(Compare-And-Swap),Interlocked等。使用ThreadPool:ThreadPool是.NETFramework提供的一个线程池,它可以......
  • Makefile 只修改了.h头文件,编译为什么不起作用?
    M,-MM,-MMD,-MF,-MT区别https://programmer.group/gcc-m-mm-mmd-mf-mt.htmlRef加-MMD选项解决头文件编译生效https://cloud.tencent.com/developer/article/1837814gcc预处理选项https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html......
  • 超大文件上传和断点续传的源代码
    ​ 前言文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上传到一半中断后,继续上传却只能重头开始上传,这种让人不爽的体验。那有没有......
  • Vue3+typescript如何给元素添加一个Ctrl+s的事件,用于保存文件?
    如下代码,建议用这个,e.keyCode已经过时,后面都是用e.key:string.onMounted(()=>{window.addEventListener('keydown',(e)=>{if(e.ctrlKey&&e.key==='s'){//检查是否按下了Ctrl+Se.preventDefault();//阻止默认行为(保存网页)con......
  • ts文件可以操控vue文件里面的ref元素吗
    ts文件可以操控vue文件里面的ref元素吗exportconstfileInputElement=ref<null|HTMLElement>(null);我在ts文件里获得fileInputElement我能操控vue文件里ref为fileInputElement的元素吗import{messagesRef,}from"@/core/helpers/chat";exportconstmessagesRef......
  • linux下利用nohup后台运行jar文件包程序
    Linux运行jar包命令如下:方式一: 1.java-jarXXX.jar特点:当前ssh窗口被锁定,可按CTRL+C打断程序运行,或直接关闭窗口,程序退出那如何让窗口不锁定?方式二 1.java-jarXXX.jar&&代表在后台运行。特定:当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行。继续改......
  • 关于为element Tree组件实现仿文件夹效果及右键菜单
    <template><divclass="custom-tree-container"@contextmenu.native="handlePaste($event)"><!--<el-tree:data="dataSource"show-checkboxnode-key="id"default-expand-all:expand-on-click-n......
  • Godot 4.0 文件系统特性的总结
    关于文件系统,官方文档犹抱琵琶半遮面,有一些很独特的特性并没有集中地摆出来,导致用的时候晕头转向。这里总结了目前我发现的Godot文件系统的一些特性。这是专门针对导出后的,因为一些操作在编辑器里面能跑,但是拿出来就不起作用了。这里并没有"自定义Resource"之类关于Resour......