首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ReadWriteLock

如何使用ReadWriteLock
EN

Stack Overflow用户
提问于 2012-05-15 07:14:29
回答 2查看 1.1K关注 0票数 0

我有一个bufferPool,它存储了很多对象。为了防止不同的线程写入相同的对象,同时为了提高效率,我使用了ReadWriteLock。但我不太确定它是如何工作的。在我找到想要访问的对象之后,

代码语言:javascript
复制
if(perm.equals(Permissions.READ_ONLY)) {                    
  readLock.lock();
} else if(Permissions.READ_WRITE) {                 
  writeLock.lock(); 
}
return the object I want to access

系统如何知道程序正在尝试访问和锁定哪个对象?或者我这里的语法是错误的?救命!谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-15 08:08:07

系统不知道您要锁定的是什么。如果您想对一系列项目使用锁对象,则必须为每个项目设置一个锁,或者为整个对象集使用一个锁(这可能是一个很大的瓶颈)。这是一个使用单个锁来同步访问的示例。

代码语言:javascript
复制
// You'll need to create this somewhere else, in your constructor
// or some other routine that gets called once.
ReentrantLock lock = new ReentrantLock(); 


// Then when you want to access:
lock.lock();
try {
 ... // do stuff with the data
}
finally {
  lock.unlock();
}
票数 1
EN

Stack Overflow用户

发布于 2012-05-15 07:29:09

我不知道java中有什么WriteReadLock,所以我假设你说的是ReadWriteLock,首先ReadWriteLock只是一个接口。您需要在某个地方声明一个类似于ReentrantReadWriteLock的实现。正是这个实例维护了非独占读锁和独占写锁。

锁实例是运行库获取监视器的对象。看看它的实现,它只是在常规的旧wait()notify()notifyall()之上的一些幻想。您可以调用来获取锁实例。启动时调用lock(),完成时调用unlock()

此外,最好的做法是在try-catch-finally中使用锁,在unlock中使用锁,以确保它无论如何都会被解锁。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10592234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档