我在一个类中有两个方法read()
和write()
,如下所示。
class Store
{
public void write()
{
// write to store;
}
public string read()
{
// read from store;
}
}
1) Store
对象是单例对象。
2)我有一个将写入存储的Writer
类和几个将同时从存储读取的Reader
类。
我的要求是,当写入者写到商店时,所有的读者都应该等待。也就是说,当控制在write()
中时,所有对read()
的调用都应该被阻塞。我该如何实现这一点?我已经在write()
方法中尝试过synchronize(Store.class)
,但似乎不适合我。
发布于 2012-04-29 21:59:55
在这种情况下,最佳选择是使用读取器-写入器锁:ReadWriteLock。它允许单个写入器,但允许多个并发读取器,因此对于这种类型的场景,它是最有效的机制。
一些示例代码:
class Store
{
private ReadWriteLock rwlock = new ReentrantReadWriteLock();
public void write()
{
rwlock.writeLock().lock();
try {
write to store;
} finally {
rwlock.writeLock().unlock();
}
}
public String read()
{
rwlock.readLock().lock();
try {
read from store;
} finally {
rwlock.readLock().unlock();
}
}
}
发布于 2012-04-29 22:01:44
synchronized
是最简单的解决方案,所以你应该解释一下你所说的“对我来说似乎不像工作”是什么意思,也许还应该告诉我们你是如何使用它的。
更好的解决方案是使用ReentrantReadWriteLock,因为它还允许对读取器进行并发访问。
发布于 2012-04-29 22:00:32
使用java.util.concurrent包中的ReadWriteLock
https://stackoverflow.com/questions/10372668
复制相似问题