如何避免文件操作中的并发操作(保存/删除)

时间:2018-08-31 01:47:39

标签: java concurrency locking

我遇到了一个问题,需要帮助。

我正在设计一个简单的文件服务(Http),用户可以使用该服务上载/下载文件以及删除文件服务器中的文件。

文件服务会将文件存储在单个Linux计算机的父文件夹(例如/data/fileserver/)下。上载的文件(例如xxx.mp4)可以与/data/fileserver/demo/1/xxx.mp4之类的计算机中的路径一起保存。

问题是: 如何避免此文件服务中的并发操作(保存/删除)

例如

用户A正在上载文件xxx.mp4,文件服务正在使用路径/data/fileserver/demo/1/xxx.mp4保存(尚未完成)。

同时,用户B调用此文件服务的delete api以删除文件夹/data/fileserver/demo。此删除操作将影响用户A的保存操作。

我希望在这种情况下,用户B的删除操作将失败。

该模型似乎锁定了树的分支,但我不知道该如何处理。

文件服务器基于Java语言。

谢谢。

1 个答案:

答案 0 :(得分:0)

由于HTTP可能是异步的,所以我将使用一种设计模式方法。

例如,您可以实现一个单例,该单例在确定的路径上处理操作。

假设您不希望'fileserver'文件夹在完成任何类型的操作之前进行任何更改。

使用键作为文件夹名,并将值设置为true或false(表示是否操作)来实现地图

似乎是一个简单的解决方案。