如果有很多线程从一个数据结构中读取数据,而很少的线程修改数据,那么就用读写锁。
分别得到读锁和写锁:
ReentrantReadWriteLock rrwl=new ReentrantReadWriteLock()
ReadLock readL = rrwl.readLock()
WriteLock writeL = rrwl.writeLock()
读锁与读锁不互斥,读锁与写锁互斥,写锁与写锁互斥。
用于优化性能,提高读写速度。
一个读写锁支持多个线程同时访问一个对象,但是在同一时刻只有一个线程可以修改此对象,并且在访问进行时不能修改RandomAccessFile fis = new RandomAccessFile("shm.lock","rw")
// 获得文件通道
FileChannel lockfc = fis.getChannel()
// 获得文件的独占锁,该方法不产生堵塞,立刻返回
FileLock flock = lockfc.tryLock()
// 如果为空,则表明已经有应用占有该锁
if(flock == null) {
...// 不能执行写 *** 作
}
else {
...// 可以执行写 *** 作
}
该锁会在应用异常退出后自动释放,这正是该处所需要的方法。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)