如何为另一个线程锁定文件

Posted

技术标签:

【中文标题】如何为另一个线程锁定文件【英文标题】:How to lock file for another threads 【发布时间】:2017-04-13 04:16:52 【问题描述】:

这是我将文件压缩成存档的方法:

public void addFilesToArchive(File source, File destination) throws 
IOException, ArchiveException 

    try (FileOutputStream archiveStream = new FileOutputStream(destination);
          ArchiveOutputStream archive = new ArchiveStreamFactory()
                  .createArchiveOutputStream(getType(), archiveStream)) 

        updateSourceFolder(source);
        generateFileAndFolderList(source);

        for (String entryName : fileList) 
            ArchiveEntry entry = getEntry(entryName);
            archive.putArchiveEntry(entry);
            archive.closeArchiveEntry();
        
    

fileList 包含所有文件层次结构(文件夹和文件)

我想防止同时从不同的线程压缩到一个目标。

尝试使用:

FileChannel channel = archiveStream.getChannel();
channel.lock();

但它似乎没有帮助。我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

您试图针对其他线程锁定文件,而不是其他进程,而这正是文件锁定不做的事情。请参阅 Javadoc。您需要使用同步或信号量。

【讨论】:

以上是关于如何为另一个线程锁定文件的主要内容,如果未能解决你的问题,请参考以下文章

软件构造 并发3(线程安全性)----锁定和同步

锁定可用时立即获取

使用互斥锁锁定向量 - Boost

Python使多线程中的每个锁都成为可能

POSIX 部分写入、线程安全和锁定

如何为 MFC 中的线程完成添加事件处理程序?