我需要创建一个文件系统管理器(或多或少),该系统可以读取或写入文件数据。

我的问题是如何处理并发?

我可以做类似的事情

public class FileSystemManager {

    private ReadWriteLock readWriteLock = new ReentrantReadWriteLock();

    public byte[] read(String path) {
        readWriteLock.readLock().lock();
        try {
            ...
        } finally {
            readWriteLock.readLock().unlock();
        }
    }
    public void write(String path, byte[] data) {
        readWriteLock.writeLock().lock();
        try {
            ...
        } finally {
            readWriteLock.writeLock().unlock();
        }
    }
}


但这将意味着所有对写入的访问(例如)将被锁定,即使第一次调用的目标是/tmp/file1.txt,第二次调用的目标是/tmp/file2.txt。

任何想法如何去做?

最佳答案

建议为并发消息而不是线程传递消息

通常,这种锁定发生在java级别以下。您是否真的打算读写相同的文件和目录?实现目录?

现在,随着线程开始真正在多核硬件上一起运行,许多不安全的线程代码可能开始爆炸。

我的建议是通过消息传递来管理并发。如果这是一项教育性活动,则可以自己动手,也可以使用成千上万个排队和消息系统之一。在这种系统中,您只有一个读取器/写入器进程,但可能有许多客户端。您避免了文件和线程并发管理的需要。

消息传递范式的一个优点是,创建用于负载平衡的分布式系统非常容易。

09-06 07:07