并发修改文件时,文件加锁疑问? 急~~

shiningflea 2014-08-11 10:08:11
最近在做的项目中,有涉及到并发操作图片文件的场景,有几点疑问需要大神指点~~

场景描述:
现需开发一个用户上传头像的功能,用户可以通过网站设置头像(上传头像文件),也可以通过手机客户端
来设置头像(上传头像图片),两种渠道上传的头像图片均保存到同一个文件userImage.jpg中。当网站和
手机端两个渠道同时并发设置头像时,便出现了并发修改(写入)userImage.jpg头像文件的场景,针对此
种场景,我有如下几点疑问:
1、此种场景下,是否需要先给文件加锁(独占锁),再进行写入操作呢?
2、在准备修改头像图片文件的之前,可能已经存在多个线程正在读取头像图片文件,此时,读取图片文件是否也
需要加锁(共享锁)以阻止其他线程获取独占锁进行写入操作呢?

望各位大神给小弟指点一二,不甚感激,谢谢啊~~~~~~

另外,可以的话,麻烦大神给详细解释一下java中文件的锁机制,谢谢~~~
...全文
276 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
菜鸟大明 2014-08-13
  • 打赏
  • 举报
回复
引用 7 楼 shiningflea 的回复:
[quote=引用 6 楼 mysticality 的回复:] 如果在一个jvm里面没有必要使用文件锁,用对象锁就足够了,文件锁是为了多进程并发使用的。
引用 1 楼 zhao9tian 的回复:
楼主,我给出我的思路。 应该跳出对文件加锁这个概念,应该是要对,操作文件的类进行加锁、甚至说代码段。 然后,用synchronize把操作文件的方法或代码段圈上就可以了,就这么简单。
受益了,感谢各位大神的帮助和指点,特别感谢1楼和6楼的大神提供的思路,总结下来还是应该用线程同步来处理。我对文件锁的理解还很肤浅,努力学习中。 thanks again~~~~[/quote] 好事儿做到底:) 推荐两本书 要是做JAVA的,看《JAVA并发实践》机械工大出版。 不是做JAVA的,可以看《多线程设计模式》,这本书不太好买,里面12种设计模式可以泛读一下。
shiningflea 2014-08-13
  • 打赏
  • 举报
回复
引用 6 楼 mysticality 的回复:
如果在一个jvm里面没有必要使用文件锁,用对象锁就足够了,文件锁是为了多进程并发使用的。
引用 1 楼 zhao9tian 的回复:
楼主,我给出我的思路。 应该跳出对文件加锁这个概念,应该是要对,操作文件的类进行加锁、甚至说代码段。 然后,用synchronize把操作文件的方法或代码段圈上就可以了,就这么简单。
受益了,感谢各位大神的帮助和指点,特别感谢1楼和6楼的大神提供的思路,总结下来还是应该用线程同步来处理。我对文件锁的理解还很肤浅,努力学习中。 thanks again~~~~
影子传说_Hades 2014-08-13
  • 打赏
  • 举报
回复
如果在一个jvm里面没有必要使用文件锁,用对象锁就足够了,文件锁是为了多进程并发使用的。
S117 2014-08-12
  • 打赏
  • 举报
回复
文件加锁应该是依赖操作系统实现的吧
jfbm788 2014-08-12
  • 打赏
  • 举报
回复
2楼说得挺好的,:-)
wu244534279 2014-08-12
  • 打赏
  • 举报
回复
这个不需要加锁吧,操作系统都不可能允许同时对一个文件进行写操作。如果一个程序正在写文件,另一个文件也想写,那后一个肯定失败了,这时候直接提示失败就好。可以模拟下数据库的乐观锁。
放纵的青春 2014-08-12
  • 打赏
  • 举报
回复
既然是不能并发修改图片 为何不在修改前就锁住呢
菜鸟大明 2014-08-11
  • 打赏
  • 举报
回复
楼主,我给出我的思路。 应该跳出对文件加锁这个概念,应该是要对,操作文件的类进行加锁、甚至说代码段。 然后,用synchronize把操作文件的方法或代码段圈上就可以了,就这么简单。

81,114

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧