Java:线程安全的RandomAccessFile

经过一番认真的搜索后,我发现RandomAccessFile-

class不是线程安全的。现在,我可以使用一个信号量来锁定所有读取和写入,但是我认为这样做的效果不是很好。从理论上讲,一次可以进行多次读取和一次写入。如何用Java做到这一点?有可能吗?

谢谢!

回答:

文件的部分锁定是一项复杂的业务,许多操作系统都避免这样做。但是,如果您坚持要这样做,一种方法是设计自己的锁定机制对象,该对象记录文件的哪些部分被锁定。本质上,在读取或写入对象之前,必须请求锁定文件的特定字节范围。如果锁在字节范围内完全重叠,则视为冲突。读取和写入锁的处理方式有所不同:读取可以与任意数量的读取锁安全地重叠,但是写入锁必须与其他锁(读取或写入)不重叠。关于是否无法获得锁定是等待还是中止,以及在写入等待期间是否阻止读取有很多问题,但是只有您才能回答有关应用程序的问题。

考虑到这样做的复杂性,最好锁定整个文件。检查您是否获得了足够的性能-并且不要忘记,只要没有写入,就可以一次允许多次读取。

以上是 Java:线程安全的RandomAccessFile 的全部内容, 来源链接: utcz.com/qa/425804.html

回到顶部