多个线程对同一个文件进行写操作是否需要加锁?

[复制链接]
查看11 | 回复10 | 2021-1-27 06:44:37 | 显示全部楼层 |阅读模式
实现多线程下载同一个文件的时候,每个线程只下载文件的一部分,各自新建一个RandomAccessFile对象向同一个文件里写数据,这时每个线程写入的数据没有交集,是否需要加锁同步?线程对象的run()方法的伪代码如下:
publicclassDownloadThreadextendsThread{
@Override
publicvoidrun(){
RandomAccessFilerandomAccessFile=newRandomAccessFile("abc.exe","rwd");
randomAccessFile.seek(position);//每个线程的position都不一样
randomAccessFile.write(data,0,length);
}
}
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:44:37 | 显示全部楼层
肯定要加锁!
回复

使用道具 举报

千问 | 2021-1-27 06:44:37 | 显示全部楼层
try...
回复

使用道具 举报

千问 | 2021-1-27 06:44:37 | 显示全部楼层
除非你对文件的最终结果不关心


回复

使用道具 举报

千问 | 2021-1-27 06:44:37 | 显示全部楼层
枷锁同步可以保证文件内容的安全性,建议是加锁
回复

使用道具 举报

千问 | 2021-1-27 06:44:37 | 显示全部楼层
其实你要的不就是断点续传功能吗?去找找这方面的资料。
回复

使用道具 举报

千问 | 2021-1-27 06:44:37 | 显示全部楼层
引用5楼Q80470101的回复:其实你要的不就是断点续传功能吗?去找找这方面的资料。
我看到网上一些实现多线程断点续传的demo写RandomAccessFile的时候不加锁同步,所以就有了这个疑问。
回复

使用道具 举报

千问 | 2021-1-27 06:44:37 | 显示全部楼层
引用6楼hmgogo3的回复:Quote: 引用5楼Q80470101的回复:
其实你要的不就是断点续传功能吗?去找找这方面的资料。

我看到网上一些实现多线程断点续传的demo写RandomAccessFile的时候不加锁同步,所以就有了这个疑问。

那就表示非必需咯
回复

使用道具 举报

千问 | 2021-1-27 06:44:37 | 显示全部楼层
必须加锁,必须加锁,必须加锁,重要的事情说三遍!
回复

使用道具 举报

千问 | 2021-1-27 06:44:37 | 显示全部楼层
引用5楼Q80470101的回复:其实你要的不就是断点续传功能吗?去找找这方面的资料。
大神啊,一下子就看出来是要断点续传功能了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行