複数のスレッドが同じファイルを変更しようとする可能性があるアプリケーションを作成しています。これを克服するために、ファイル名を同時ハッシュマップ filename<->count に保存し、wait と notify を使用することを考えました。
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()
}
しかし、上記のコードはエレガントだとは思いません。これを行うより良い方法はありますか?
編集:単純なロックは、すべてのスレッドのフローをブロックします。同じファイルを変更したいスレッドをブロックしたいだけで、他のスレッドは影響を受けないはずです