【发布时间】:2013-06-10 19:04:41
【问题描述】:
我正在编写一个应用程序,其中可能有多个线程尝试修改同一个文件。为了克服这个问题,我考虑将文件名存储在并发哈希图中,文件名计数并使用等待和通知,即
if(map has fileName){
map.put(fileName, map.get(fileName)++ )
wait()
}else{
map.put(fileName,1)
}
modifyFile(fileName);
{
count = map.get(fileName);
if count == 1 then map.remove(fileName)
else map.put(fileName, count-- )
notify()
}
但我不觉得上面的代码很优雅。有一个更好的方法吗?
编辑:一个简单的锁会阻塞所有线程的流。我只是想阻塞想要修改同一个文件的线程,其他线程应该不受影响
【问题讨论】:
-
鉴于您编写的是伪代码,因此很难准确地告诉您想要什么。除了简单的锁之外,您还需要什么吗?
-
@JonSkeet 一个简单的锁会阻塞所有线程的流。我只是想阻塞想要修改同一个文件的线程,其他线程应该不受影响
-
不,简单的锁只会阻塞试图获取锁的线程。
-
@Joel 是的,简单的锁是指所有线程都使用相同的锁对象
-
您是否担心其他程序或其他JVM修改文件?或者只是你正在运行的一个 JVM?
标签: java multithreading synchronization semaphore