所以我需要创建一个文件,然后写一行,这必须是原子的。因此,在初始化时,没有其他进程可以修改文件。
我有一个想法,在锁定时锁定不同的东西,然后执行操作然后释放锁定以让另一方进入。但这非常繁琐,也可能是错误的,因为创建锁定并获取它可能是不是原子的(我猜)。没别的办法吗?
答案 0 :(得分:3)
我建议您编写临时文件,然后将重命名为您的文件。我不确定这个操作是否在java中实现为所有操作系统的原子,但至少在Unix上你有机会,因为我认为它使用与mv
相同的原子调用。
我想,它在Windows上不会是真正的原子。对于大多数应用来说,它几乎是“原子的”。
答案 1 :(得分:0)
如果你想要一些可以安全防范其他进程的东西,我建议你阅读http://en.wikipedia.org/wiki/File_locking并利用JNI进入操作系统级别。