Fol*_*den 8 java multithreading locking thread-safety
经过一些严肃的googleing后,我发现RandomAccessFile-class不是线程安全的.现在我可以使用一个信号量来锁定所有的读写操作,但我不认为它表现得非常好.理论上,应该可以一次执行多次读取和一次写入.我怎么能用Java做到这一点?有可能吗?
谢谢!
我可以使用一个信号量锁定所有读写但我不认为它表现得很好.
关于性能,永远不要想.总是衡量.
那就是说,java.util.concurrent.locks.ReentrantReadWriteLock你正在寻找.
文件的部分锁定是一项复杂的工作,许多操作系统都避免这样做。但是,如果您坚持这样做,一种方法是设计自己的锁定机制对象来记录文件的哪些部分被锁定。本质上,在读取或写入对象之前,必须请求文件的特定字节范围的锁定。如果锁在字节范围内完全重叠,则认为锁发生冲突。读锁和写锁的处理方式不同:读锁可以安全地与任意数量的读锁重叠,但写锁必须与其他锁(无论是读锁还是写锁)重叠。关于如果无法获得锁是否等待或中止,以及在写入等待时是否阻止读取,存在很多问题,但只有您可以回答有关您的应用程序的问题。
考虑到此操作的复杂性,锁定整个文件可能会更好。检查您是否获得了足够的性能 - 并且不要忘记,只要没有写入,您就可以一次允许多个读取。
| 归档时间: |
|
| 查看次数: |
10489 次 |
| 最近记录: |