答案 0 :(得分:1)
利用java.util.concurrent.locks.ReentrantReadWriteLock。使用java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock来下载文件的线程和java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock用于在下载时应该访问它的其他线程。
答案 1 :(得分:0)
在http://download.java.net/jdk7/docs/api/java/util/concurrent/locks/package-frame.html有一堆锁实现,如果所有可能的删除器都在同一个VM中,那么这应该会有所帮助,但是在java核心库中没有flock等效。
答案 2 :(得分:0)
当删除来自系统调用时,你无法处理这种情况,遗憾的是在java中这是不可能的
所以要么你应付这个并且你通过一个简单的FileLockManager或其他什么来保护你的'delete'方法,或者鉴于文件的大小很小,你可以将它复制到另一个目录(每个客户端/组的一个临时文件)例如客户端)然后用户可以用原始文件做任何他想做的事情
只是我的2美分
答案 3 :(得分:0)
我有针对此问题的程序化解决方案
此方法存在问题:如果某个线程由于某种原因而崩溃,则堆栈将始终具有一个条目,该文件永远不会被删除。